рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдЧреБрдЧрд▓ рдЕрдиреНрддрд░реНрд╡рд╛рд░реНрддрд╛рдмрд╛рдЯ рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрджреИ: 4 рдлрд░рдХ рддрд░рд┐рдХрд╛рд╣рд░реВ

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдЧреБрдЧрд▓ рдЕрдиреНрддрд░реНрд╡рд╛рд░реНрддрд╛рдмрд╛рдЯ рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрджреИ: 4 рдлрд░рдХ рддрд░рд┐рдХрд╛рд╣рд░реВ

рдЬрдм рдо рдПрд▓реНрдЧреЛрд░рд┐рджрдордХреЛ рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди рдЕрдзреНрдпрдпрди рдЧрд░рд┐рд░рд╣реЗрдХреЛ рдерд┐рдПрдБ, рдореИрд▓реЗ рдпреЛ рднреЗрдЯреЗрдВ рдпреЛ рдЧреБрдЧрд▓рдХреЛ рдирдХреНрдХрд▓реА рдЕрдиреНрддрд░реНрд╡рд╛рд░реНрддрд╛рдХреЛ рднрд┐рдбрд┐рдпреЛ рд╣реЛредред рдпрд╕рд▓реЗ рдареВрд▓рд╛ рдЯреЗрдХреНрдиреЛрд▓реЛрдЬреА рдХрд░реНрдкреЛрд░реЗрд╕рдирд╣рд░реВрдорд╛ рдХрд╕рд░реА рдЕрдиреНрддрд░реНрд╡рд╛рд░реНрддрд╛ рд▓рд┐рдЗрдиреНрдЫ рднрдиреНрдиреЗ рдХреБрд░рд╛рдХреЛ рдПрдХ рд╡рд┐рдЪрд╛рд░ рдорд╛рддреНрд░ рджрд┐рдБрджреИрди, рддрд░ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдПрд▓реНрдЧреЛрд░рд┐рджрдорд┐рдХ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рдХрд╕рд░реА рд╕рдХреЗрд╕рдореНрдо рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдорд╛рдзрд╛рди рдЧрд░рд┐рдиреНрдЫ рднрдиреЗрд░ рдмреБрдЭреНрди рдкрдирд┐ рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред

рдпреЛ рд▓реЗрдЦ рднрд┐рдбрд┐рдпреЛ рд╕рдВрдЧ рд╕рдВрдЧрдд рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реЛред рдпрд╕рдорд╛ рдо рджреЗрдЦрд╛рдЗрдПрдХрд╛ рд╕рдмреИ рд╕рдорд╛рдзрд╛рдирд╣рд░реВрдорд╛ рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫреБ, рд╕рд╛рдереИ JavaScript рдорд╛ рд╕рдорд╛рдзрд╛рдирдХреЛ рдореЗрд░реЛ рдЖрдлреНрдиреИ рд╕рдВрд╕реНрдХрд░рдгред рдкреНрд░рддреНрдпреЗрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдордХреЛ рд╕реВрдХреНрд╖реНрдорддрд╛рд╣рд░реВ рдкрдирд┐ рдЫрд▓рдлрд▓ рдЧрд░рд┐рдиреНрдЫред

рд╣рд╛рдореА рд╕рдореНрдЭрд╛рдЙрдБрдЫреМрдВ: рд╕рдмреИ Habr рдкрд╛рдардХрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ - Habr рдкреНрд░реЛрдореЛ рдХреЛрдб рдкреНрд░рдпреЛрдЧ рдЧрд░реА рдХреБрдиреИ рдкрдирд┐ Skillbox рдкрд╛рдареНрдпрдХреНрд░рдордорд╛ рднрд░реНрдирд╛ рдЧрд░реНрджрд╛ резреж,режрежреж рд░реВрдмрд▓ рдЫреБрдЯред

Skillbox рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░реНрджрдЫ: рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкрд╛рдареНрдпрдХреНрд░рдо "рдореЛрдмрд╛рдЗрд▓ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛ рдкреНрд░реЛ".

рд╕рдорд╕реНрдпрд╛рдХреЛ рдЧрдарди

рд╣рд╛рдореАрд▓рд╛рдИ рдЕрд░реНрдбрд░ рдЧрд░рд┐рдПрдХреЛ рдПрд░реЗ рд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рди рджрд┐рдЗрдПрдХреЛ рдЫред рддреНрдпрд╕рдкрдЫрд┐ array рдорд╛ рдХреБрдиреИ рдкрдирд┐ рджреБрдИ рд╕рдВрдЦреНрдпрд╛рдХреЛ рдпреЛрдЧрдлрд▓ рджрд┐рдЗрдПрдХреЛ рдорд╛рди рдмрд░рд╛рдмрд░ рд╣реБрди рд╕рдХреНрдЫ рдХрд┐ рдЫреИрди рднрдиреНрдиреЗ рдЖрдзрд╛рд░рдорд╛ рд╕рд╣реА рд╡рд╛ рдЧрд▓рдд рдлрд░реНрдХрд╛рдЙрдиреЗ рдкреНрд░рдХрд╛рд░реНрдп рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕реЛрдзрд┐рдиреНрдЫред

рдЕрд░реНрдХреЛ рд╢рдмреНрджрдорд╛, рдХреЗ рддреНрдпрд╣рд╛рдБ рдПрд░реЗрдорд╛ рджреБрдИрд╡рдЯрд╛ рдкреВрд░реНрдгрд╛рдЩреНрдХрд╣рд░реВ рдЫрдиреН, x рд░ y, рдЬрд╕рд▓рд╛рдИ рд╕рдБрдЧреИ рдЬреЛрдбреНрджрд╛ рддреЛрдХрд┐рдПрдХреЛ рдорд╛рди рдмрд░рд╛рдмрд░ рд╣реБрдиреНрдЫ?

рдЙрджрд╛рд╣рд░рдг рдП

рдпрджрд┐ рд╣рд╛рдореАрд▓рд╛рдИ рдПрд░реЗ [1, 2, 4, 9] рджрд┐рдЗрдПрдХреЛ рдЫ рд░ рдорд╛рди 8 рдЫ рднрдиреЗ, рдкреНрд░рдХрд╛рд░реНрдпрд▓реЗ рдЧрд▓рдд рдлрд░реНрдХрд╛рдЙрдБрдЫ рдХрд┐рдирднрдиреЗ рдПрд░реЗрдорд╛ рдХреБрдиреИ рдкрдирд┐ рджреБрдИ рд╕рдВрдЦреНрдпрд╛рд╣рд░реВ 8 рд╕рдореНрдо рдердкреНрди рд╕рдХреНрджреИрдиред

рдЙрджрд╛рд╣рд░рдг B

рддрд░ рдпрджрд┐ рдпреЛ рдПрд░реЗ [1, 2, 4, 4] рд╣реЛ рд░ рдорд╛рди 8 рд╣реЛ рднрдиреЗ, рдкреНрд░рдХрд╛рд░реНрдпрд▓реЗ 4 + 4 = 8 рдХреЛ рдХрд╛рд░рдгрд▓реЗ рд╕рд╣реА рдлрд░реНрдХрд╛рдЙрдиреБ рдкрд░реНрдЫред

рд╕рдорд╛рдзрд╛рди рез: рдмреНрд░реБрдЯ рдлреЛрд░реНрд╕

рд╕рдордп рдЬрдЯрд┐рд▓рддрд╛: O(N┬▓)ред
рдЕрдиреНрддрд░рд┐рдХреНрд╖ рдЬрдЯрд┐рд▓рддрд╛: O(1)ред

рд╕рдмреИрднрдиреНрджрд╛ рд╕реНрдкрд╖реНрдЯ рдЕрд░реНрде рдиреЗрд╕реНрдЯреЗрдб рд▓реВрдкрд╣рд░реВрдХреЛ рдЬреЛрдбреА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБ рд╣реЛред

const findSum = (arr, val) => {
  for (let i = 0; i < arr.length; i++) {
    for (let j = 0; j < arr.length; j++) {
      if (i !== j && arr[i] + arr[j] === val) {
        return true;
      };
    };
  };
  return false;
};

рдпреЛ рд╕рдорд╛рдзрд╛рди рдкреНрд░рднрд╛рд╡рдХрд╛рд░реА рдЫреИрди рдХрд┐рдирднрдиреЗ рдпрд╕рд▓реЗ рдПрд░реЗрдорд╛ рджреБрдИрд╡рдЯрд╛ рддрддреНрд╡рд╣рд░реВрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╕рдореНрднрд╛рд╡рд┐рдд рдпреЛрдЧрдлрд▓ рдЬрд╛рдБрдЪ рдЧрд░реНрджрдЫ рд░ рдкреНрд░рддреНрдпреЗрдХ рдЬреЛрдбрд╛ рд╕реВрдЪрдХрд╛рдВрдХрд╣рд░реВ рджреБрдИ рдкрдЯрдХ рддреБрд▓рдирд╛ рдЧрд░реНрджрдЫред (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдЬрдм i = 1 рд░ j = 2 рд╡рд╛рд╕реНрддрд╡рдорд╛ i = 2 рд░ j = 1 рд╕рдБрдЧ рддреБрд▓рдирд╛ рдЧрд░реНрджрд╛ рд╕рдорд╛рди рд╣реБрдиреНрдЫ, рддрд░ рдпрд╕ рд╕рдорд╛рдзрд╛рдирдорд╛ рд╣рд╛рдореА рджреБрд╡реИ рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫреМрдВ)ред

рдХрд┐рдирднрдиреЗ рд╣рд╛рдореНрд░реЛ рд╕рдорд╛рдзрд╛рдирд▓реЗ рд▓реВрдкрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдиреЗрд╕реНрдЯреЗрдбрдХреЛ рдЬреЛрдбреА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ, рдпреЛ O(N┬▓) рд╕рдордп рдЬрдЯрд┐рд▓рддрд╛рд╕рдБрдЧ рдЪрддреБрд░реНрднреБрдЬ рд╣реЛред


рд╕рдорд╛рдзрд╛рди реи: рдмрд╛рдЗрдирд░реА рдЦреЛрдЬ

рд╕рдордп рдЬрдЯрд┐рд▓рддрд╛: O(Nlog(N))ред
рдЕрдиреНрддрд░рд┐рдХреНрд╖ рдЬрдЯрд┐рд▓рддрд╛: O(1)
.

рдПрд░реЗрд╣рд░реВ рдЕрд░реНрдбрд░ рднрдПрдХрд╛рд▓реЗ, рд╣рд╛рдореА рдмрд╛рдЗрдирд░реА рдЦреЛрдЬреА рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬреНрди рд╕рдХреНрдЫреМрдВред рдпреЛ рдХреНрд░рдордмрджреНрдз arrays рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдмреИрднрдиреНрджрд╛ рдХреБрд╢рд▓ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реЛред рдмрд╛рдЗрдирд░реА рдЦреЛрдЬрдорд╛ O(log(N)) рдХреЛ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рд╕рдордп рд╣реБрдиреНрдЫред рдпрджреНрдпрдкрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдЕрдЭреИ рдкрдирд┐ рдЕрдиреНрдп рд╕рдмреИ рдорд╛рдирд╣рд░реВ рд╡рд┐рд░реБрджреНрдз рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдЬрд╛рдБрдЪ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд▓реБрдк рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред

рдпрд╣рд╛рдБ рдПрдХ рд╕рдорд╛рдзрд╛рди рдЬрд╕реНрддреЛ рджреЗрдЦрд┐рди рд╕рдХреНрдЫред рдЪреАрдЬрд╣рд░реВ рд╕реНрдкрд╖реНрдЯ рдЧрд░реНрди, рд╣рд╛рдореА рдмрд╛рдЗрдирд░реА рдЦреЛрдЬ рдирд┐рдпрдиреНрддреНрд░рдг рдЧрд░реНрди рдЫреБрдЯреНрдЯреИ рдкреНрд░рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВред рд░ рдкрдирд┐ removeIndex() рдкреНрд░рдХрд╛рд░реНрдп, рдЬреЛ рджрд┐рдЗрдПрдХреЛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдорд╛рдЗрдирд╕ array рдХреЛ рд╕рдВрд╕реНрдХрд░рдг рдлрд░реНрдХрд╛рдЙрдБрдЫред

const findSum = (arr, val) => {
  for (let i = 0; i < arr.length; i++){
    if (binarySearch(removeIndex(arr, i), val - arr[i])) {
      return true;
    }
  };
  return false;
};
 
const removeIndex = (arr, i) => {
  return arr.slice(0, i).concat(arr.slice(i + 1, arr.length));
};
 
const binarySearch = (arr, val) => {
  let start = 0;
  let end = arr.length - 1;
  let pivot = Math.floor(arr.length / 2); 
  while (start < end) {
    if (val < arr[pivot]) {
      end = pivot - 1;
    } else if (val > arr[pivot]) {
      start = pivot + 1;
    };
    pivot = Math.floor((start + end) / 2);
    if (arr[pivot] === val) {
      return true;
    }
  };
  return false;
};

рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ [реж] рдмрд╛рдЯ рд╕реБрд░реБ рд╣реБрдиреНрдЫред рдпрд╕рд▓реЗ рддреНрдпрд╕рдкрдЫрд┐ рдкрд╣рд┐рд▓реЛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдмрд╛рд╣реЗрдХ рдПрд░реНрд░реЗрдХреЛ рд╕рдВрд╕реНрдХрд░рдг рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫ рд░ рдмрд╛рдЗрдирд░реА рдЦреЛрдЬреА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ рдХрд┐ рдЗрдЪреНрдЫрд┐рдд рдпреЛрдЧрдлрд▓ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрди рдПрд░реЗрдорд╛ рдмрд╛рдБрдХреА рдорд╛рдирд╣рд░реВ рдердкреНрди рд╕рдХрд┐рдиреНрдЫред рдпреЛ рдХрд╛рд░реНрдп рдПрд░реЗрдорд╛ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡рдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рдкрдЯрдХ рдЧрд░рд┐рдиреНрдЫред

рд▓реВрдкрдХреЛ рд▓рд╛рдЧрд┐ рдЖрдлреИрдорд╛ O(N) рдХреЛ рдПрдХ рд░реЗрдЦреАрдп рд╕рдордп рдЬрдЯрд┐рд▓рддрд╛ рд╣реБрдиреЗрдЫ, рддрд░ рд▓реВрдкрдХреЛ рд▓рд╛рдЧрд┐ рднрд┐рддреНрд░ рд╣рд╛рдореА рдмрд╛рдЗрдирд░реА рдЦреЛрдЬреА рдЧрд░реНрдЫреМрдВ, рдЬрд╕рд▓реЗ O(Nlog(N)) рдХреЛ рд╕рдордЧреНрд░ рд╕рдордп рдЬрдЯрд┐рд▓рддрд╛ рджрд┐рдиреНрдЫред рдпреЛ рд╕рдорд╛рдзрд╛рди рдЕрдШрд┐рд▓реНрд▓реЛ рднрдиреНрджрд╛ рд░рд╛рдореНрд░реЛ рдЫ, рддрд░ рдЕрдЭреИ рдкрдирд┐ рд╕реБрдзрд╛рд░ рдХреЛ рд▓рд╛рдЧреА рдард╛рдЙрдБ рдЫред


рд╕рдорд╛рдзрд╛рди 3: рд░реИрдЦрд┐рдХ рд╕рдордп

рд╕рдордп рдЬрдЯрд┐рд▓рддрд╛: O(N)ред
рдЕрдиреНрддрд░рд┐рдХреНрд╖ рдЬрдЯрд┐рд▓рддрд╛: O(1)ред

рдЕрдм рд╣рд╛рдореА рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдиреЗрдЫреМрдВ, рд╕рдореНрдЭрдирд╛ рдЫ рдХрд┐ рдПрд░реЗ рдХреНрд░рдордмрджреНрдз рдЫред рд╕рдорд╛рдзрд╛рди рджреБрдИ рдирдореНрдмрд░рд╣рд░реВ рд▓рд┐рдиреБ рд╣реЛ: рдПрдЙрдЯрд╛ рд╕реБрд░реБрдорд╛ рд░ рдЕрд░реНрдХреЛ рдЕрдиреНрддреНрдпрдорд╛ред рдпрджрд┐ рдкрд░рд┐рдгрд╛рдо рдЖрд╡рд╢реНрдпрдХ рдПрдХ рднрдиреНрджрд╛ рдлрд░рдХ рдЫ рднрдиреЗ, рддреНрдпрд╕рдкрдЫрд┐ рд╕реБрд░реБ рд░ рдЕрдиреНрддреНрдп рдмрд┐рдиреНрджреБрд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рдЕрдиреНрддрддрдГ рд╣рд╛рдореАрд▓реЗ рд╡рд╛рдВрдЫрд┐рдд рдорд╛рдирдХреЛ рд╕рд╛рдордирд╛ рдЧрд░реНрдиреЗрдЫреМрдВ рд░ рд╕рддреНрдп рдлрд┐рд░реНрддрд╛ рдЧрд░реНрдиреЗрдЫреМрдВ, рд╡рд╛ рд╕реБрд░реБ рд░ рдЕрдиреНрддреНрдп рдмрд┐рдиреНрджреБрд╣рд░реВ рдХрдиреНрднрд░реНрдЬ рд╣реБрдиреЗрдЫрдиреН рд░ рдЧрд▓рдд рдлрд░реНрдХрд╛рдЙрдиреЗрдЫрдиреНред

const findSum = (arr, val) => {
  let start = 0;
  let end = arr.length - 1;
  while (start < end) {
    let sum = arr[start] + arr[end];
    if (sum > val) {
      end -= 1;
    } else if (sum < val) {
      start += 1;
    } else {
      return true;
    };
  };
  return false;
};


рдЕрдм рд╕рдмреИ рдареАрдХ рдЫ, рд╕рдорд╛рдзрд╛рди рдЗрд╖реНрдЯрддрдо рджреЗрдЦрд┐рдиреНрдЫред рддрд░ рдХрд╕рд▓реЗ рдЧреНрдпрд╛рд░реЗрдиреНрдЯреА рджрд┐рди рд╕рдХреНрдЫ рдХрд┐ рд╕рд░рдгреА рдЕрд░реНрдбрд░ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ?

рддреНрдпрд╕рдкрдЫрд┐ рдХреЗ рд╣реБрдиреНрдЫ?

рдкрд╣рд┐рд▓реЛ рдирдЬрд░рдорд╛, рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рдПрд░реЗрд▓рд╛рдИ рдЕрд░реНрдбрд░ рдЧрд░реНрди рд╕рдХреНрдереНрдпреМрдВ рд░ рддреНрдпрд╕рдкрдЫрд┐ рдорд╛рдерд┐рдХреЛ рд╕рдорд╛рдзрд╛рди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдереНрдпреМрдВред рддрд░ рдпрд╕рд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рд╕рдордпрд▓рд╛рдИ рдХрд╕рд░реА рдЕрд╕рд░ рдЧрд░реНрдЫ?

рдЙрддреНрддрдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕рдордп рдЬрдЯрд┐рд▓рддрд╛ O (Nlog (N)) рдХреЛ рд╕рд╛рде рджреНрд░реБрдд рдХреНрд░рдо рд╣реЛред рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ рдпрд╕рд▓рд╛рдИ рд╣рд╛рдореНрд░реЛ рдЗрд╖реНрдЯрддрдо рд╕рдорд╛рдзрд╛рдирдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдпреМрдВ рднрдиреЗ, рдпрд╕рд▓реЗ рдпрд╕рдХреЛ рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрдирд▓рд╛рдИ O(N) рдмрд╛рдЯ O(Nlog(N)) рдорд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдиреЗрдЫред рдХреЗ рдпреЛ рдПрдХ unordered array рд╕рдВрдЧ рдПрдХ рд░реЗрдЦреАрдп рд╕рдорд╛рдзрд╛рди рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдореНрднрд╡ рдЫ?

4 рд╕рдорд╛рдзрд╛рди

рд╕рдордп рдЬрдЯрд┐рд▓рддрд╛: O(N)ред
рдЕрдиреНрддрд░рд┐рдХреНрд╖ рдЬрдЯрд┐рд▓рддрд╛: O(N)ред

рд╣реЛ, рддреНрдпрд╣рд╛рдБ рдПрдХ рд░реИрдЦрд┐рдХ рд╕рдорд╛рдзрд╛рди рдЫ; рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ рдЦреЛрдЬрд┐рд░рд╣реЗрдХрд╛ рдорд┐рд▓рд╛рдирд╣рд░реВрдХреЛ рд╕реВрдЪреА рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реА рдирдпрд╛рдБ рдПрд░реЗ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдпрд╣рд╛рдБ рдЯреНрд░реЗрдб-рдЕрдл рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдкреНрд░рдпреЛрдЧ рд╣реЛ: рдпреЛ O(1) рднрдиреНрджрд╛ рдареВрд▓реЛ рд╕реНрдкреЗрд╕ рдЬрдЯрд┐рд▓рддрд╛ рднрдПрдХреЛ рдкреЗрдкрд░рдорд╛ рдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рд╣реЛред

рдпрджрд┐ рджрд┐рдЗрдПрдХреЛ рдПрд░реЗрдХреЛ рдкрд╣рд┐рд▓реЛ рдорд╛рди 1 рд╣реЛ рд░ рдЦреЛрдЬ рдорд╛рди 8 рд╣реЛ рднрдиреЗ, рд╣рд╛рдореА "рдЦреЛрдЬ рдорд╛рдирд╣рд░реВ" рдПрд░реЗрдорд╛ рдорд╛рди 7 рдердкреНрди рд╕рдХреНрдЫреМрдВред

рддреНрдпрд╕рдкрдЫрд┐, рдЬрдм рд╣рд╛рдореА рдПрд░реЗрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡рд▓рд╛рдИ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрдЫреМрдВ, рд╣рд╛рдореА "рдЦреЛрдЬ рдорд╛рдирд╣рд░реВ" рдХреЛ рдПрд░реЗ рдЬрд╛рдБрдЪ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ рд░ рддреА рдордзреНрдпреЗ рдПрдЙрдЯрд╛ рд╣рд╛рдореНрд░реЛ рдореВрд▓реНрдп рдмрд░рд╛рдмрд░ рдЫ рдХрд┐ рдЫреИрди рднрдиреЗрд░ рд╣реЗрд░реНрди рд╕рдХреНрдЫреМрдВред рдпрджрд┐ рд╣реЛ рднрдиреЗ, рд╕рддреНрдп рдлрд┐рд░реНрддрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

const findSum = (arr, val) => {
  let searchValues = [val - arr[0]];
  for (let i = 1; i < arr.length; i++) {
    let searchVal = val - arr[i];
    if (searchValues.includes(arr[i])) {
      return true;
    } else {
      searchValues.push(searchVal);
    }
  };
  return false;
};

рд╕рдорд╛рдзрд╛рдирдХреЛ рдЖрдзрд╛рд░ рднрдиреЗрдХреЛ рд▓реВрдкрдХреЛ рд▓рд╛рдЧрд┐ рд╣реЛ, рдЬрд╕рд▓рд╛рдИ рд╣рд╛рдореАрд▓реЗ рдорд╛рдерд┐ рджреЗрдЦреНрдпреМрдВ, O(N) рдХреЛ рд░реЗрдЦреАрдп рд╕рдордп рдЬрдЯрд┐рд▓рддрд╛ рдЫред

рд╣рд╛рдореНрд░реЛ рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рджреЛрд╕реНрд░реЛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рднрд╛рдЧ рд╣реЛ Array.prototype.include(), рдПрдЙрдЯрд╛ JavaScript рд╡рд┐рдзрд┐ рдЬрд╕рд▓реЗ array рдорд╛ рджрд┐рдЗрдПрдХреЛ рдорд╛рди рд╕рдорд╛рд╡реЗрд╢ рдЫ рдХрд┐ рдЫреИрди рднрдиреНрдиреЗ рдЖрдзрд╛рд░рдорд╛ рд╕рд╣реА рд╡рд╛ рдЧрд▓рдд рдлрд░реНрдХрд╛рдЙрдБрдЫред

Array.prototype.includes() рдХреЛ рд╕рдордп рдЬрдЯрд┐рд▓рддрд╛ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди, рд╣рд╛рдореА MDN (рд░ JavaScript рдорд╛ рд▓реЗрдЦрд┐рдПрдХреЛ) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХреЛ рдкреЛрд▓рд┐рдлрд┐рд▓ рд╣реЗрд░реНрди рд╕рдХреНрдЫреМрдВ рд╡рд╛ Google V8 (C++) рдЬрд╕реНрддрд╛ JavaScript рдЗрдиреНрдЬрд┐рдирдХреЛ рд╕реНрд░реЛрдд рдХреЛрдбрдорд╛ рд╡рд┐рдзрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред

// https://tc39.github.io/ecma262/#sec-array.prototype.includes
if (!Array.prototype.includes) {
  Object.defineProperty(Array.prototype, 'includes', {
    value: function(valueToFind, fromIndex) {
 
      if (this == null) {
        throw new TypeError('"this" is null or not defined');
      }
 
      // 1. Let O be ? ToObject(this value).
      var o = Object(this);
 
      // 2. Let len be ? ToLength(? Get(O, "length")).
      var len = o.length >>> 0;
 
      // 3. If len is 0, return false.
      if (len === 0) {
        return false;
      }
 
      // 4. Let n be ? ToInteger(fromIndex).
      //    (If fromIndex is undefined, this step produces the value 0.)
      var n = fromIndex | 0;
 
      // 5. If n тЙе 0, then
      //  a. Let k be n.
      // 6. Else n < 0,
      //  a. Let k be len + n.
      //  b. If k < 0, let k be 0.
      var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
 
      function sameValueZero(x, y) {
        return x === y || (typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y));
      }
 
      // 7. Repeat, while k < len
      while (k < len) {
        // a. Let elementK be the result of ? Get(O, ! ToString(k)).
        // b. If SameValueZero(valueToFind, elementK) is true, return true.
        if (sameValueZero(o[k], valueToFind)) {
          return true;
        }
        // c. Increase k by 1.
        k++;
      }
 
      // 8. Return false
      return false;
    }
  });
}

рдпрд╣рд╛рдБ Array.prototype.include() рдХреЛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рднрд╛рдЧ рдЪрд░рдг 7 рдорд╛ рд░рд╣реЗрдХреЛ while рд▓реВрдк рд╣реЛ рдЬрд╕рд▓реЗ (рд▓рдЧрднрдЧ) рджрд┐рдЗрдПрдХреЛ рдПрд░реЗрдХреЛ рд╕рдореНрдкреВрд░реНрдг рд▓рдореНрдмрд╛рдЗрд▓рд╛рдИ рдкрд╛рд░ рдЧрд░реНрджрдЫред рдпрд╕рдХреЛ рдЕрд░реНрде рдпрд╕рдХреЛ рд╕рдордп рдЬрдЯрд┐рд▓рддрд╛ рдкрдирд┐ рд░реЗрдЦреАрдп рдЫред рдареАрдХ рдЫ, рдХрд┐рдирдХрд┐ рдпреЛ рд╕рдзреИрдВ рд╣рд╛рдореНрд░реЛ рдореБрдЦреНрдп рдПрд░реЗ рдкрдЫрд┐ рдПрдХ рдХрджрдо рдЫ, рд╕рдордп рдЬрдЯрд┐рд▓рддрд╛ O (N + (N - 1)) рд╣реЛред рдмрд┐рдЧ рдУ рдиреЛрдЯреЗрд╢рди рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ O(N) рдорд╛ рд╕рд░рд▓ рдмрдирд╛рдЙрдБрдЫреМрдВ - рдХрд┐рдирднрдиреЗ рдпреЛ N рд╣реЛ рдЬрд╕рд▓реЗ рдЗрдирдкреБрдЯ рд╕рд╛рдЗрдЬ рдмрдврд╛рдЙрдБрджрд╛ рд╕рдмреИрднрдиреНрджрд╛ рдареВрд▓реЛ рдкреНрд░рднрд╛рд╡ рдкрд╛рд░реНрдЫред

рд╕реНрдерд╛рдирд┐рдп рдЬрдЯрд┐рд▓рддрд╛рдХреЛ рд╕рдиреНрджрд░реНрднрдорд╛, рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдПрд░реЗ рдЖрд╡рд╢реНрдпрдХ рдЫ рдЬрд╕рдХреЛ рд▓рдореНрдмрд╛рдЗрд▓реЗ рдореВрд▓ рдПрд░реЗрд▓рд╛рдИ рдкреНрд░рддрд┐рдмрд┐рдореНрдмрд┐рдд рдЧрд░реНрдЫ (рдорд╛рдЗрдирд╕ рд╡рди, рд╣реЛ, рддрд░ рддреНрдпрд╕рд▓рд╛рдИ рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ), рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк O(N) рд╕реНрдерд╛рдирд┐рдп рдЬрдЯрд┐рд▓рддрд╛ рд╣реБрдиреНрдЫред рдареАрдХ рдЫ, рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ рдмрдвреНрдпреЛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдордХреЛ рдЕрдзрд┐рдХрддрдо рджрдХреНрд╖рддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрджрдЫред


рдорд▓рд╛рдИ рдЖрд╢рд╛ рдЫ рдХрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдЖрдлреНрдиреЛ рднрд┐рдбрд┐рдпреЛ рдЕрдиреНрддрд░реНрд╡рд╛рд░реНрддрд╛рдХреЛ рдкреВрд░рдХрдХреЛ рд░реВрдкрдорд╛ рд▓реЗрдЦ рдЙрдкрдпреЛрдЧреА рдкрд╛рдЙрдиреБрднрдпреЛред рдпрд╕рд▓реЗ рджреЗрдЦрд╛рдЙрдБрдЫ рдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рдорд╕реНрдпрд╛ рд╡рд┐рднрд┐рдиреНрди рддрд░рд┐рдХрд╛рдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХрд╛ рд╕реНрд░реЛрддрд╣рд░реВ (рд╕рдордп, рдореЗрдореЛрд░реА) рд╕рдВрдЧ рдзреЗрд░реИ рдлрд░рдХ рддрд░рд┐рдХрд╛рдорд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред

Skillbox рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░реНрджрдЫ:

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди