這是我參與更文挑戰的第2天,活動詳情查看: 更文挑戰前端
受「王魚」同窗的點撥,從昨天開始刷LeetCode Top精選面試題,爲衝擊秋招作準備。面試
給定一個整數數組,判斷是否存在重複元素。算法
若是存在一值在數組中出現至少兩次,函數返回 true 。若是數組中每一個元素都不相同,則返回 false 。數組
示例 1:markdown
輸入: [1,2,3,1] 輸出: true前端工程師
示例 2:app
輸入: [1,2,3,4] 輸出: false函數
示例 3:post
輸入: [1,1,1,3,3,4,3,2,4,2] 輸出: true學習
解題思路:數組轉Set去重。Set的size 和數組length相等,無重複元素。不等,有重複元素
var containsDuplicate = function(nums) {
return new Set(nums).size !== nums.length
};
複製代碼
哈哈哈,有人說你這是什麼啊,我也會,別急,先熱個身嘛,來,力扣刷刷的思路雖遲但到~
解題思路:在對數字從小到大排序以後。數組的重複元素必定出如今相鄰的位置,所以咱們能夠掃描已經排序的數組,每次判斷相鄰的兩個元素是否相等,若是相等則說明存在重複的元素。
var containsDuplicate = function(nums) {
// 將數組作升序排列
nums.sort((a, b) => a - b);
// 數組的長度
const n = nums.length;
// 循環遍歷數組 由於下面須要有 i+1的操做,因此這裏n-1是取不到的。
for (let i = 0; i < n - 1; i++) {
if (nums[i] === nums[i + 1]) {
return true;
}
}
return false;
};
// 時間複雜度: O(NlogN),其中N爲數組的長度。須要對數組進行排序。
// 空間複雜度: O(logN),其中N爲數組的長度,注意在這裏咱們應當考慮遞歸調用棧的深度
複製代碼
解題思路:對於數組中的每一個元素,咱們將它插入到哈希表中,若是插入一個元素的時候發現這個元素已經存在於哈希表中,則說明存在重複的元素。
var containsDuplicate = function(nums) {
const map = new Map()
for(let i of nums) {
if(map.has(i)){
return true
} else {
map.set(i,1)
}
}
return false
};
// 時間複雜度:O(N),其中 N爲數組的長度。
// 空間複雜度:O(N),其中 N爲數組的長度。
複製代碼
今日加餐我選擇了LeetCode13六、只出現一次的數,兩個一塊兒恰,味道更好嗷~
給定一個非空整數數組,除了某個元素只出現一次之外,其他每一個元素均出現兩次。找出那個只出現了一次的元素。
var singleNumber = function(nums) {
//法1 排序後 先後比較
nums.sort((a,b) => a - b);
for(let i = 0; i < nums.length; i++){
if(nums[i-1] !== nums[i] && nums[i] !== nums[i+1])
return nums[i];
}
//法2 利用map
let map = new Map();
nums.forEach(item =>{
map.set(item, map.has(item) ? map.get(item) + 1 : 1);
})
for(let [key, val] of map.entries()){
if(val === 1) return key;
}
//法3 異或運算
return nums.reduce((pre,cur) => pre ^ cur);
};
複製代碼
npy:法3的異或看不懂哇!!!
me:好好好,來給你講解一下,而後給你說一下簡單的思路哈~
首先針對異或運算,這裏作一個知識點的總結:
任何數和本身作異或運算,結果爲 00,即 a⊕a=0a⊕a=0 。 任何數和 00 作異或運算,結果仍是本身,即 a⊕0=⊕a⊕0=⊕。 異或運算中,知足交換律和結合律,也就是 a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=ba⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b。
var singleNumber = function(nums) {
let ans = 0;
for(let i = 0; i < nums.length; i++){
ans ^= nums[i];
}
return ans;
};
複製代碼
刷題打卡第8天,選擇力扣第21七、136題,學習了數組中的一個元素或者重複元素,一塊兒加油哇~
若是你以爲這篇內容對你挺有有幫助的話: 點贊支持下吧,讓更多的人也能看到這篇內容(收藏不點贊,都是耍流氓 -_-)關注公衆號給npy的前端祕籍,咱們一塊兒學習一塊兒進步。 以爲不錯的話,也能夠閱讀其餘文章(感謝朋友的鼓勵與支持🌹🌹🌹)