본문 바로가기
Web development/Algorithm

[LeetCode] Single Number, Intersection of Two Arrays II

by 자몬다 2021. 1. 12.

 

 

Single Number

배열 요소에 짝 없이 혼자 있는 요소를 찾는 문제.

하나씩 뽑아서 짝을 찾아 제거하는 방식으로 풀었는데, 좀 더 좋은 방법이 없을까...

leetcode.com/explore/featured/card/top-interview-questions-easy/92/array/549/

/**
 * @param {number[]} nums
 * @return {number}
 */
var singleNumber = function(nums) {
    // 반복문은 최대로 돌아도 주어진 배열 길이의 반만큼만 돌면 된다.
    const count = Math.floor(nums.length/2);
    
    for(let i = 0; i < count; i++){
        const item = nums.shift();
        const index = nums.findIndex((n)=> n===item);
        if(index > -1) {
            nums.splice(index, 1);    
        } else {
            // 짝을 찾지 못한 경우 해당 요소가 single number다.
            return item;
        }        
    }
    // 반복문이 끝까지 돈 경우 배열에는 요소가 하나만 남아있고,
    // 해당 요소가 single number다.
    return nums[0];
};

 

 

Intersection of Two Arrays II

두 배열의 교집합을 찾는 문제다.

https://leetcode.com/explore/featured/card/top-interview-questions-easy/92/array/674/

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
var intersect = function(nums1, nums2) {
    const answer = [];
    // 더 짧은 배열로 반복을 돌면 좋을 것 같다.
    let short = nums1;
    let long = nums2;
    if (nums1.length > nums2.length){
        short = nums2;
        long = nums1;
    }
    for(let n1 of short) {
        const index = long.indexOf(n1)
        if(index > -1) {
            const deleted = long.splice(index, 1);
            answer.push(deleted[0])
        }
    }
    return answer;
};

 

댓글