[Algorithm] 37 week(10.10 ~ 10.16) 2/3

Dev_min·2022년 10월 10일
0

algorithm

목록 보기
121/157

15. 3Sum

var threeSum = function(nums) {
    const result = [];
    const sortedNums = [...nums].sort((a, b) => a - b);
    let left = 0;
    let right = 0;
    let sum = 0;

    for(let i = 0; i < sortedNums.length - 2; i++){
        if(i > 0 && sortedNums[i] === sortedNums[i - 1]) continue;

        left = i + 1;
        right = sortedNums.length - 1;

        while(left < right){
            sum = sortedNums[i] + sortedNums[left] + sortedNums[right]

            if(sum < 0){
                left += 1;
            } else if(sum > 0){
                right -= 1;
            } else {
                result.push([sortedNums[i], sortedNums[left], sortedNums[right]]);

                while(left < right && sortedNums[left] === sortedNums[left+1]){
                    left += 1
                }

                while(left < right && sortedNums[right] === sortedNums[right-1]){
                    right -= 1
                }

                left += 1;
                right -= 1;
            }
        }
    }
    return result;
};
profile
TIL record

0개의 댓글