рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ Google рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рд╕реЗ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди: 4 рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ Google рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рд╕реЗ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди: 4 рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЗ

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

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

рдЕрдиреБрд╕реНрдорд╛рд░рдХ: "рд╣реИрдмрд░" рдХреЗ рд╕рднреА рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП - "рд╣реИрдмрд░" рдкреНрд░рдЪрд╛рд░ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдкрд╛рдареНрдпрдХреНрд░рдо рдореЗрдВ рдирд╛рдорд╛рдВрдХрди рдХрд░рддреЗ рд╕рдордп 10 рд░реВрдмрд▓ рдХреА рдЫреВрдЯред

рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИ: рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкрд╛рдареНрдпрдХреНрд░рдо "рдореЛрдмрд╛рдЗрд▓ рдбреЗрд╡рд▓рдкрд░ рдкреНрд░реЛ".

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдирд┐рд░реВрдкрдг

рд╣рдореЗрдВ рдПрдХ рдХреНрд░рдордмрджреНрдз рд╕рд░рдгреА рдФрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рдЗрд╕реЗ рдПрдХ рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕рд╣реА рдпрд╛ рдЧрд▓рдд рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдпрд╣ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рд░рдгреА рдореЗрдВ рдХрд┐рдиреНрд╣реАрдВ рджреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдпреЛрдЧ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдорд╛рди рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдХреНрдпрд╛ рд╕рд░рдгреА рдореЗрдВ рджреЛ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИрдВ, x рдФрд░ y, рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдорд╛рди рдмрд░рд╛рдмрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ?

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

рдпрджрд┐ рд╣рдореЗрдВ рдПрдХ рд╕рд░рдгреА рджреА рдЧрдИ рд╣реИ [1, 2, 4, 9] рдФрд░ рдорд╛рди 8 рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдЧрд▓рдд рд▓реМрдЯрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╕рд░рдгреА рдореЗрдВ рдХреЛрдИ рднреА рджреЛ рд╕рдВрдЦреНрдпрд╛рдПрдБ 8 рддрдХ рдирд╣реАрдВ рдЬреБрдбрд╝ рд╕рдХрддреА рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдмреА

рд▓реЗрдХрд┐рди рдпрджрд┐ рдпрд╣ рдПрдХ рд╕рд░рдгреА рд╣реИ [1, 2, 4, 4] рдФрд░ рдорд╛рди 8 рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рддреНрдп рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ 4 + 4 = 8ред

рд╕рдорд╛рдзрд╛рди 1: рдкрд╛рд╢рд╡рд┐рдХ рдмрд▓

рд╕рдордп рдЬрдЯрд┐рд▓рддрд╛: 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┬▓) рд╕рдордп рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рд╕рд╛рде рджреНрд╡рд┐рдШрд╛рдд рд╣реИред


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

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

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

рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╕рдорд╛рдзрд╛рди рдХреИрд╕рд╛ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ. рдЪреАрдЬреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд╛рдЗрдирд░реА рдЦреЛрдЬ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рд░рд┐рдореВрд╡рдЗрдВрдбреЗрдХреНрд╕() рдлрд╝рдВрдХреНрд╢рди рднреА, рдЬреЛ рджрд┐рдП рдЧрдП рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рдШрдЯрд╛рдХрд░ рд╕рд░рдгреА рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рд▓реМрдЯрд╛рддрд╛ рд╣реИред

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;
};

рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЗрдВрдбреЗрдХреНрд╕ [0] рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж рдпрд╣ рдкрд╣рд▓реЗ рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рд░рдгреА рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдирд░реА рдЦреЛрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рдВрдЫрд┐рдд рдпреЛрдЧ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЗрд╖ рдорд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрд╣ рдХреНрд░рд┐рдпрд╛ рд╕рд░рдгреА рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдХреА рдЬрд╛рддреА рд╣реИред

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


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

рд╕рдордп рдЬрдЯрд┐рд▓рддрд╛: рдУ(рдПрди)ред
рдЕрдВрддрд░рд┐рдХреНрд╖ рдЬрдЯрд┐рд▓рддрд╛: 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)) рдореЗрдВ рдмрджрд▓ рджреЗрдЧрд╛ред рдХреНрдпрд╛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рд░реИрдЦрд┐рдХ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдирд╛ рд╕рдВрднрд╡ рд╣реИ?

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

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

рд╣рд╛рдВ, рдПрдХ рд░реИрдЦрд┐рдХ рд╕рдорд╛рдзрд╛рди рд╣реИ; рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдирдИ рд╕рд░рдгреА рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЙрди рдорд┐рд▓рд╛рдиреЛрдВ рдХреА рд╕реВрдЪреА рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдвреВрдВрдв рд░рд╣реЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд╡реНрдпрд╛рдкрд╛рд░-рдмрдВрдж рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ рд╣реИ: рдпрд╣ 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() рд╣реИ, рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рдзрд┐ рдЬреЛ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ рдХрд┐ рд╕рд░рдгреА рдореЗрдВ рджрд┐рдП рдЧрдП рдорд╛рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ, рд╕рд╣реА рдпрд╛ рдЧрд▓рдд рд▓реМрдЯрд╛рдПрдЧрд╛ред

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

// 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)) рд╣реИред рдмрд┐рдЧ рдУ рдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЗрд╕реЗ рдУ (рдПрди) рддрдХ рд╕рд░рд▓ рдмрдирд╛рддреЗ рд╣реИрдВ - рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрди рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЗрдирдкреБрдЯ рдЖрдХрд╛рд░ рдмрдврд╝рд╛рддреЗ рд╕рдордп рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИред

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


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

рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИ:

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ