特殊社会(Googleインタビュー)



説明する


(完全に間違っています)
function solution(arr) {
  let answer;
  let neg = [];
  let pos = [];
  for (let x of arr) {
    if (x < 0) neg.push(x);
    else pos.push(x);
  }
  neg.sort((a, b) => b - a);
  pos.sort((a, b) => a - b);
  answer = neg.concat(pos);
  return answer;
}

let arr = [1, 2, 3, -3, -2, 5, 6, -6];
console.log(solution(arr));
問題をよく読まなかったために起きた惨事...

私の答えを修正(1)-無知を取り除く

function solution(arr) {
  let answer;
  let neg = [];
  let pos = [];
  for (let x of arr) {
    if (x < 0) neg.push(x);
    else pos.push(x);
  }
  answer = neg.concat(pos);
  return answer;
}

let arr = [1, 2, 3, -3, -2, 5, 6, -6];
console.log(solution(arr));
簡単な解決方法
(このように解決しなければならないなら、問題は起こらない)

私の解答を修正します(2)-Bubble Sort ideaを参照してください

function solution(arr) {
  let answer = arr;
  for (let i = arr.length - 1; i >= 0; i--) {
    for (let j = 0; j < i; j++) {
      if (arr[j] > 0 && arr[j + 1] < 0) [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
    }
  }
  return answer;
}

let arr = [1, 2, 3, -3, -2, 5, 6, -6];
console.log(solution(arr));
これはこの問題の核心解のようだ.
特定の条件の要素だけを前または後ろに抽出する場合はbubble sortの考え方を使えばよい.

解決策の解答1-無知な解答だけ

function solution(arr) {
  let answer = [];
  for (let x of arr) {
    if (x < 0) answer.push(x);
  }
  for (let x of arr) {
    if (x > 0) answer.push(x);
  }
  return answer;
}

let arr = [1, 2, 3, -3, -2, 5, 6, -6];
console.log(solution(arr));
どうせ無知で問題を解決するにはfor 문を2回使う必要があるのでしょうか?このような考えが生まれる

解決策2-Bubble Sort

function solution(arr) {
  let answer = arr;
  for (let i = 0; i < arr.length - 1; i++) {
    for (let j = 0; j < arr.length - i - 1; j++) {
      if (arr[j] > 0 && arr[j + 1] < 0) {
        [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
      }
    }
  }
  return answer;
}

let arr = [1, 2, 3, -3, -2, 5, 6, -6];
console.log(solution(arr));
この問題をBubbleSortで解決したとは思わなかったが、少し硬くなったようだ.

学習の内容


配列内で特定の要素を前または後ろに移動する場合は、Bubble Sortを考慮します.