LeetCode 在需要接觸演算碼的工程師中,為相當知名的練習場所。當你有需要挑戰自己的腦筋、面試前的準備……等,都滿適合來這邊看一下你的演算法和資料結構的熟悉程度。這回要筆記的有 Single Number、Intersection of Two Arrays、Intersection of Two Arrays II。
題目
136. Single Number
[連結]:https://leetcode.com/problems/single-number/
1 2 3 4 5 6 7 8 9 10 11 12 |
/* * 1. 先造出一個 map,並計數出現的次數 * 2. 由於是照順序技術的,所以在 map 中第一個出現 value === 1 的就會是答案。 */ var singleNumber = function(nums) { let map = {} for(let item of nums){ map[item] = map[item] ? map[item] += 1 : 1 } return Object.entries(map).filter(item=>item[1]===1)[0][0] } |
349. Intersection of Two Arrays
[連結]:https://leetcode.com/problems/intersection-of-two-arrays/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
/* 求交集,就想到 Set 的集合特性 * 造一個答案的空集合來儲存值 */ var intersection = function(nums1, nums2) { let result = new Set() nums1 = new Set(nums1) nums2.forEach(d=>{ if(nums1.has(d)){ result.add(d) } }) return [...result] }; |
350. Intersection of Two Arrays II
[連結]:https://leetcode.com/problems/intersection-of-two-arrays-ii/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
/* * 1. 建立一個 hash map,來記錄出現次數 * 2. 迭代 nums2 的各個值,如果有對到 map[item] ,則推送到 result,並將 count -- * 3. 當 map[item] 為 0 的時候,用此作為條件判斷,就會是 if(0)。這形同於 if(false)。 */ /** * @param {number[]} nums1 * @param {number[]} nums2 * @return {number[]} */ var intersect = function(nums1, nums2) { let map = {} let result = [] for(let item of nums1){ map[item] = map[item] ? map[item] += 1 : 1 } for(let item of nums2){ if(map[item]){ result.push(item) map[item]-- } } return result }; |