Skip to content

Commit afaf83e

Browse files
authored
Merge branch 'DaleStudy:main' into main
2 parents 7d30552 + 1230e6b commit afaf83e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+1743
-0
lines changed

contains-duplicate/HerrineKim.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// 시간복잡도: O(n)
2+
3+
/**
4+
* @param {number[]} nums
5+
* @return {boolean}
6+
*/
7+
var containsDuplicate = function (nums) {
8+
const seen = new Set();
9+
for (let num of nums) {
10+
if (seen.has(num)) {
11+
return true; // 중복 발견
12+
}
13+
seen.add(num);
14+
}
15+
return false; // 모든 요소가 고유
16+
};
17+

contains-duplicate/HodaeSsi.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from typing import List
2+
3+
class Solution:
4+
def containsDuplicate(self, nums: List[int]) -> bool:
5+
dict = {}
6+
for num in nums:
7+
dict[num] = dict.get(num, 0) + 1
8+
if dict[num] > 1:
9+
return True
10+
return False
11+

contains-duplicate/Jay-Mo-99.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class Solution(object):
2+
def containsDuplicate(self, nums):
3+
"""
4+
:type nums: List[int]
5+
:rtype: bool
6+
"""
7+
#해석
8+
#sets는 복수 요소를 허용하지 않는다(sets don't allow duplicate elements.)
9+
#만약 set에 기반된 list가 기존 nums와 길이가 다르다면 duplicate element가 있었다는 뜻이다.
10+
#If the length of the set created from nums is different from the original list(nums), It means there are duplicates.
11+
12+
#Big O
13+
#N: 주어진 배열 nums의 길이(Length of the input list nums)
14+
15+
#Time Complexity: O(N)
16+
#- set은 nums의 길이 n에 기반하여 생성된다(Creating a set from nums): O(N)
17+
#- 생성된 list와 기존 nums와의 비교는 상수(Comparing the lengths between created list and original list) : O(1)
18+
19+
#Space Complexity: O(N)
20+
#-set은 nums의 길이에 의해 생성되므로 n에 영향받음(The set requires extra space depends on the size of nums) : O(N)
21+
return len(list(set(nums))) != len(nums) #set된 list와 기존 nums의 len이 일치하지 않는다면 true(duplicate), 아니면 false
22+
23+

contains-duplicate/Real-Reason.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package leetcode_study
2+
3+
class SolutionContainsDuplicate {
4+
fun containsDuplicate(nums: IntArray): Boolean {
5+
val size = nums.size
6+
val numsToSet = nums.toSet()
7+
8+
return size != numsToSet.size
9+
}
10+
}

contains-duplicate/YeomChaeeun.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
function containsDuplicate(nums: number[]): boolean {
2+
3+
// 접근 (1) - 시간 복잡도가 매우 커서 실패
4+
// const uniqueArr = nums.filter((item, index) => { return nums.indexOf(item) === index })
5+
// console.log(uniqueArr)
6+
//
7+
// return nums.length !== uniqueArr.length;
8+
9+
// 접근 (2) - 양 옆의 값을 비교 =============
10+
// if(nums.length === 1)
11+
// return false;
12+
//
13+
// // 정렬
14+
// nums.sort()
15+
//
16+
// // 양 옆의 값을 비교
17+
// for(let i = 0; i < nums.length; i++){
18+
// console.log(nums[i], nums[i+1])
19+
// if(nums[i] === nums[i+1]){
20+
// return true;
21+
// }
22+
// }
23+
// return false;
24+
25+
// 접근 (3) - obj를 이용 ================
26+
let obj={}
27+
28+
for(let i = 0; i < nums.length; i++) {
29+
if(obj[nums[i]]) {
30+
return true;
31+
}
32+
obj[nums[i]] = 1;
33+
}
34+
return false;
35+
36+
};

contains-duplicate/aa601.c

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#include <stdio.h>
2+
#include <stdbool.h>
3+
4+
void merge(int *nums, int left, int mid, int right)
5+
{
6+
int i;
7+
int j;
8+
int k;
9+
int leftArr[mid - left + 1];
10+
int rightArr[right - mid];
11+
12+
i = -1;
13+
while (++i < mid - left + 1) // 왼쪽 분할된 부분 넣기
14+
leftArr[i] = nums[left + i];
15+
i = -1;
16+
while (++i < right - mid) // 오른쪽 분할된 부분 넣기
17+
rightArr[i] = nums[mid + i + 1];
18+
i = 0;
19+
j = 0;
20+
k = left; // **** nums배열인덱스 => left부터 시작
21+
// 나누어진 배열끼리 비교해서 nums배열 재배치
22+
while ((i < mid - left + 1) && (j < right - mid)) {
23+
if (leftArr[i] <= rightArr[j])
24+
nums[k] = leftArr[i++];
25+
else
26+
nums[k] = rightArr[j++];
27+
++k;
28+
}
29+
while (i < mid - left + 1) // left배열 남아있으면 마저 삽입
30+
nums[k++] = leftArr[i++];
31+
while (j < right - mid) // right배열 남아있으면 마저 삽입
32+
nums[k++] = rightArr[j++];
33+
}
34+
35+
void mergeSort(int *nums, int left, int right) {
36+
int mid;
37+
38+
if (left < right)
39+
{
40+
mid = (left + right) / 2;
41+
mergeSort(nums, left, mid); // 왼쪽분할
42+
mergeSort(nums, mid + 1, right); // 오른쪽분할
43+
merge(nums, left, mid, right);
44+
}
45+
}
46+
47+
bool containsDuplicate(int* nums, int numsSize) {
48+
int i;
49+
50+
mergeSort(nums, 0, numsSize - 1);
51+
i = -1;
52+
while (++i + 1 < numsSize) {
53+
if (nums[i] == nums[i + 1])
54+
return (true);
55+
}
56+
return (false);
57+
}
58+
59+
60+
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import java.util.*;
2+
3+
class Solution {
4+
public boolean containsDuplicate(int[] nums) {
5+
/*
6+
* -- 풀이 --
7+
* nums를 순회하면서 HashSet에 데이터를 넣어서 중복되었는 지 확인한다.
8+
*
9+
* -- 시간 복잡도 --
10+
* 길이 N인 nums를 순환하는데 대한 시간 복잡도 => O(N)
11+
* hashSet의 add에 대한 시간 복잡도 => O(1)
12+
* 전체 시간 복잡도 O(1)*O(N) =O(n)
13+
* ------------------------------------------
14+
*
15+
* -- 공간 복잡도 --
16+
* 길이 N인 nums를 넣을 Hashset이 있어야 하기에 O(N)
17+
* -------------------------------------------
18+
*/
19+
20+
// 중복을 확인할 수 있는 set 선언
21+
HashSet<Integer> hashSet = new HashSet<>();
22+
23+
for (int num: nums) {
24+
// set에 있다면
25+
if (!hashSet.add(num)) return true;
26+
}
27+
28+
return false;
29+
}
30+
}
31+

contains-duplicate/higeuni.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// 풀이
2+
// Set으로 중복 제거 후 nums와 길이 비교
3+
4+
// TC : O(N)
5+
// SC : O(N)
6+
7+
var containsDuplicate = function(nums) {
8+
return new Set(nums).size !== nums.length
9+
};
10+

contains-duplicate/imsosleepy.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// 중복제거를 위해 set을 적극적으로 활용해야할 듯...
2+
class Solution {
3+
public boolean containsDuplicate(int[] nums) {
4+
Set<Integer> numSet = new HashSet<>();
5+
6+
for (int num : nums) {
7+
if (numSet.contains(num)) {
8+
return true;
9+
}
10+
numSet.add(num);
11+
}
12+
13+
return false;
14+
}
15+
}

contains-duplicate/jungsiroo.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution:
2+
def containsDuplicate(self, nums: List[int]) -> bool:
3+
# Slow - tc : O(n) / sc : O(1)
4+
5+
"""return len(set(nums)) != len(nums)"""
6+
7+
# Fast - tc : O(n) / sc : O(n)
8+
check = set()
9+
10+
for num in nums:
11+
if num in check:
12+
return True
13+
check.add(num)
14+
15+
return False
16+
17+
18+

0 commit comments

Comments
 (0)