Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions contains-duplicate/youngduck.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// 시간복잡도 : new Set은 n번 x add O(1) 인 함수, 즉 배열의 모든 원소를 한번씩 순회하므로 O(n)
// 공간복잡도 : n개의 원소를 Set에 저장하므로 O(n)

function containsDuplicate(nums: number[]): boolean {

const uniqueNumsSet = new Set(nums);

return uniqueNumsSet.size !== nums.length;
};

27 changes: 27 additions & 0 deletions top-k-frequent-elements/youngduck.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// N은 nums의 길이, M은 서로 다른 숫자의 개수
// 시간복잡도 : O(N + M log M) - N개 원소의 빈도를 세고, M개 항목을 빈도순으로 정렬
// 공간복잡도 : O(M) - 서로 다른 숫자의 빈도를 Map에 저장하고 M개 항목의 배열 생성

function topKFrequent(nums: number[], k: number): number[] {

// 숫자를 key, 등장 횟수를 value로 저장
const FrequentMap = new Map<number,number>();

for(const i of nums){
if(FrequentMap.has(i)){
// 이미 등장한 숫자는 횟수 증가. has로 확인했으므로 get의 결과가 undefined가 아님
FrequentMap.set(i,FrequentMap.get(i)!+1);
}
else{
// 처음 등장한 숫자는 1로 초기화
FrequentMap.set(i,1);
}
}


return [...FrequentMap.entries()] // Map을 [숫자, 등장 횟수] 쌍의 배열로 변환
.sort((a,b)=>b[1]-a[1]) // 등장 횟수를 기준으로 내림차순 정렬
.slice(0,k) // 가장 많이 등장한 k개 항목 선택
.map(([num])=>num); // 등장 횟수를 제외하고 숫자만 반환
};

29 changes: 29 additions & 0 deletions two-sum/youngduck.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// 시간복잡도 : 반복문한번에 완결된다 생각하여 O(N)인줄 알았는데 O(N^2)풀이라고 하네요, 해시맵으로 구현하는방법을 추가적으로 학습했습니다.
// 공간복잡도 : O(1) 입력값이 커져도 변수개수는 일정

function twoSum(nums: number[], target: number): number[] {
// 이중반복문이아니라 투포인터를 둬서 해결
let left = 0, right = 1;

while(left<nums.length-1){
const leftRightSum=nums[left]+nums[right];

// 조건 만족 탈출
if(leftRightSum===target){
break;
}
// 조건불만족의 경우 left,right투포인터 어떻게 증가할것인지 처리
// right가 우선끝으로가고 left를 증가해야할땐 right를 left값으로 이동시키면 O(n)으로 전수 순회가 가능
else if(right<nums.length-1){
right+=1;
}
else{
left+=1;
right = left+1;
}
}


return [left,right];
};

Loading