본문 바로가기

hello world/algorithm

오늘의 알고리즘: Rotate Array (217. LeetCode)

 

 

leetcode.com/problems/contains-duplicate/

 

Contains Duplicate - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

 

 

중복이 있으면 true를 반환하는 문제인데

JS처럼 중복을 제거한 array를 반환해주는 함수가 없고 직접 만들어야 한다.

 

package unique

// Ints returns a unique subset of the int slice provided.
func Ints(input []int) []int {
	u := make([]int, 0, len(input))
	m := make(map[int]bool)

	for _, val := range input {
		if _, ok := m[val]; !ok {
			m[val] = true
			u = append(u, val)
		}
	}

	return u
}

 

 

func containsDuplicate(nums []int) bool {
    hash := make(map[int]struct{})
    for _, n := range nums{
        if _, ok := hash[n]; ok {
            return true
        }
        hash[n] = struct{}{}
    }
    return false
}

 

 

이게 더 깔끔한 코드 같다.

대체적으로 런타임이 적게 걸리는 코드에는 모두 map을 사용해서 풀었다.

 

이중 for loop를 이용해서 푼 문제는

메모리를 적게 사용했지만, 런타임이 위 코드보다 더 길었다. (거의 20ms, 1000ms 급 차이...)

 

func containsDuplicate(nums []int) bool {
    for i := 0; i < len(nums); i++ {
		for j := i + 1; j < len(nums); j++ {
			if nums[i] == nums[j] {
				return true
			}
		}
	}
	return false
}

 

(난 런타임 짧은 코드가 더 좋은듯...)