diff --git a/contains-duplicate/hyer0705.ts b/contains-duplicate/hyer0705.ts new file mode 100644 index 000000000..31909510c --- /dev/null +++ b/contains-duplicate/hyer0705.ts @@ -0,0 +1,3 @@ +function containsDuplicate(nums: number[]): boolean { + return new Set(nums).size !== nums.length; +} diff --git a/house-robber/hyer0705.ts b/house-robber/hyer0705.ts new file mode 100644 index 000000000..9747cd936 --- /dev/null +++ b/house-robber/hyer0705.ts @@ -0,0 +1,35 @@ +// 0ms +function rob(nums: number[]): number { + const n = nums.length; + + if (n === 1) return nums[0]; + if (n === 2) return Math.max(nums[0], nums[1]); + + const dp: number[] = Array(n).fill(0); + dp[0] = nums[0]; + dp[1] = Math.max(nums[0], nums[1]); + + for (let i = 2; i < n; i++) { + dp[i] = Math.max(dp[i - 2] + nums[i], dp[i - 1]); + } + + return dp[n - 1]; +} + +// 1ms +/* +function rob(nums: number[]): number { + const n = nums.length; + + const dp: number[][] = Array.from({ length: n }, () => Array(2).fill(0)); + + dp[0][1] = nums[0]; + + for (let i = 1; i < n; i++) { + dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1]); + dp[i][1] = dp[i - 1][0] + nums[i]; + } + + return Math.max(...dp[n - 1]); +} +*/ diff --git a/longest-consecutive-sequence/hyer0705.ts b/longest-consecutive-sequence/hyer0705.ts new file mode 100644 index 000000000..7fdb3f60e --- /dev/null +++ b/longest-consecutive-sequence/hyer0705.ts @@ -0,0 +1,22 @@ +function longestConsecutive(nums: number[]): number { + if (nums.length === 0) return 0; + + const numSet = new Set(nums); + let longest = 0; + + for (const num of numSet) { + if (!numSet.has(num - 1)) { + let currentNum = num; + let sequenceLength = 1; + + while (numSet.has(currentNum + 1)) { + currentNum++; + sequenceLength++; + } + + longest = Math.max(longest, sequenceLength); + } + } + + return longest; +} diff --git a/top-k-frequent-elements/hyer0705.ts b/top-k-frequent-elements/hyer0705.ts new file mode 100644 index 000000000..9de2b9853 --- /dev/null +++ b/top-k-frequent-elements/hyer0705.ts @@ -0,0 +1,25 @@ +function topKFrequent(nums: number[], k: number): number[] { + nums.sort((a, b) => a - b); + + const countMap = new Map(); + + let pointer = 0; + while (pointer < nums.length) { + const currentNumber = nums[pointer]; + let count = 0; + + while (nums[pointer] === currentNumber) { + pointer++; + count++; + } + + countMap.set(currentNumber, count); + } + + const result = Array.from(countMap) + .sort((a, b) => b[1] - a[1]) + .slice(0, k) + .map((value) => value[0]); + + return result; +} diff --git a/two-sum/hyer0705.ts b/two-sum/hyer0705.ts new file mode 100644 index 000000000..d1297972f --- /dev/null +++ b/two-sum/hyer0705.ts @@ -0,0 +1,16 @@ +function twoSum(nums: number[], target: number): number[] { + const numsLen = nums.length; + const result: number[] = []; + + for (let i = 0; i < numsLen - 1; i++) { + for (let j = i + 1; j < numsLen; j++) { + if (nums[i] + nums[j] === target) { + result.push(i); + result.push(j); + break; + } + } + } + + return result; +}