🙄 오늘 하려고 했는데 못한 것
인덱스나 위치에 해당하는 포인터/값을 만든 다음, 특정 조건에 따라 중간 지점부터 시작 지점이나 끝 지점이나 양쪽 지점을 향해 이동시키는 패턴
👇 예시
console.log(sumZero([-4, -3, -2, -1, 0, 1, 2, 5])); // [ -2, 2 ]
console.log(sumZero([-3, -2, -1, 0, 1, 2, 3])); // [ -3, 3 ]
console.log(sumZero([-2, 0, 1, 3])); // undefined
console.log(sumZero([1, 2, 3])); // undefined
function sumZero(arr){
for(let i = 0; i < arr.length; i++){
for(let j = i+1; j < arr.length; j++){
if(arr[i] + arr[j] === 0){
return [arr[i], arr[j]];
}
}
}
}
sumZero([-4,-3,-2,-1,0,1,2,5])
단순하게 이중for문을 돌리면 끝
시간 복잡도 O(n^2)
const sumZero = (arr) => {
let left = 0;
let right = arr.length - 1;
while (left < right) {
let sum = arr[left] + arr[right];
if (sum === 0) {
return [arr[left], arr[right]];
} else if (sum > 0) {
right--;
} else {
left++;
}
}
};
console.log(sumZero([-4, -3, -2, -1, 0, 1, 2, 5])); // [ -2, 2 ]
console.log(sumZero([-3, -2, -1, 0, 1, 2, 3])); // [ -3, 3 ]
console.log(sumZero([-2, 0, 1, 3])); // undefined
console.log(sumZero([1, 2, 3])); // undefined
시간 복잡도 O(N)
👇 예시
console.log(countUniqueValues([1, 2, 2, 5, 7, 7, 99])); // 5
console.log(countUniqueValues([1, 1, 1, 1, 1, 2])); // 2
function countUniqueValues(arr) {
if (arr.length === 0) return 0;
var i = 0;
for (var j = 1; j < arr.length; j++) {
if (arr[i] !== arr[j]) {
// 다른 값을 만나면
i++;
// arr[i]를 한 칸 옮기고
arr[i] = arr[j];
// 그 인덱스의 값을 다른 값으로 바꿔줌
// 결과적으로 안 겹치는 숫자 1개씩 순서대로 정렬이 됨
}
}
return i + 1;
}
console.log(countUniqueValues([1, 2, 2, 5, 7, 7, 99])); // 5
console.log(countUniqueValues([1, 1, 1, 1, 1, 2])); // 2
시간 복잡도 O(N)
내일부터 일요일까지 수업 없다...연휴(?)를 잘 활용해야지