diff --git a/find-minimum-in-rotated-sorted-array/YeomChaeeun.ts b/find-minimum-in-rotated-sorted-array/YeomChaeeun.ts new file mode 100644 index 000000000..2b4918a44 --- /dev/null +++ b/find-minimum-in-rotated-sorted-array/YeomChaeeun.ts @@ -0,0 +1,37 @@ +/** + * 정렬된 배열에서 최소값 찾기 + * 알고리즘 복잡도 + * - 시간 복잡도: O(logn) + * - 공간 복잡도: O(1) + * @param nums + */ +function findMin(nums: number[]): number { + // 풀이 1 - sort() 사용 + // 시간 복잡도: O(nlogn) / 공간 복잡도: O(1) + // nums.sort((a, b) => a - b) + // return nums[0] + + // 풀이 2 - 배열이 정렬되어 있음을 활용한 풀이 + // 시간 복잡도: O(n) / 공간 복잡도: O(1) + // let min = nums[0]; + // for(let i = 1; i < nums.length; i++) { + // console.log(nums[i]) + // min = Math.min(nums[i], min) + // } + // return min + + // 이분 탐색법 활용 + // 절반씩 잘라서 nums[n-1] > nums[n] 의 지점을 찾는다 + let low = 0; + let high = nums.length - 1; + while(low < high) { + let mid = low + Math.floor((high - low) / 2); + + if(nums[mid] > nums[high]) { + low = mid + 1; + } else { + high = mid; + } + } + return nums[low] +} diff --git a/linked-list-cycle/YeomChaeeun.ts b/linked-list-cycle/YeomChaeeun.ts new file mode 100644 index 000000000..3aca4c0d2 --- /dev/null +++ b/linked-list-cycle/YeomChaeeun.ts @@ -0,0 +1,45 @@ +/** + * Definition for singly-linked list. + * class ListNode { + * val: number + * next: ListNode | null + * constructor(val?: number, next?: ListNode | null) { + * this.val = (val===undefined ? 0 : val) + * this.next = (next===undefined ? null : next) + * } + * } + */ +/** + * 순환되는 링크드 리스트 찾기 + * 알고리즘 복잡도 + * - 시간 복잡도: O(n) + * - 공간 복잡도: O(1) + * @param head + */ +function hasCycle(head: ListNode | null): boolean { + // 1. set을 이용한 풀이 + // 시간 복잡도: O(n) , 공간 복잡도: O(n) + // let set = new Set(); + // while(head !== null) { + // // set에 이미 존재하는지 확인 + // if(set.has(head)) return true + // set.add(head) + // head = head.next + // } + + // 2. 토끼와 거북이 알고리즘 + // 포인터를 2개 이동하는 방법 + let slow = head + let fast = head + + while (fast?.next) { + slow = slow.next + fast = fast.next.next + + if(slow === fast) { + return true + } + } + + return false +} diff --git a/maximum-product-subarray/YeomChaeeun.ts b/maximum-product-subarray/YeomChaeeun.ts new file mode 100644 index 000000000..06a9b8431 --- /dev/null +++ b/maximum-product-subarray/YeomChaeeun.ts @@ -0,0 +1,31 @@ +/** + * 최대 부분 곱 구하기 + * 알고리즘 복잡도 + * - 시간 복잡도: O(n) + * - 공간 복잡도: O(1) + * @param nums + */ +function maxProduct(nums: number[]): number { + if(nums.length === 1) return nums[0] + + let max = nums[0] + let currMax = nums[0] + let currMin = nums[0] + + for(let i = 1; i < nums.length; i++) { + const temp = currMax; + + currMax = Math.max( + nums[i], temp * nums[i], currMin * nums[i] + ) + + currMin = Math.min( + nums[i], temp * nums[i], currMin * nums[i] + ) + + max = Math.max(max, currMax); + } + + return max; + +}