前端JavaScript算法找出只出現(xiàn)一次的數(shù)字
題目:只出現(xiàn)一次的數(shù)字
給定一個非空整數(shù)數(shù)組,除了某個元素只出現(xiàn)一次以外,其余每個元素均出現(xiàn)兩次。找出那個只出現(xiàn)了一次的元素。
說明:
你的算法應(yīng)該具有線性時間復(fù)雜度。 你可以不使用額外空間來實現(xiàn)嗎?
示例 1:
輸入: [2,2,1]
輸出: 1示例 2:
輸入: [4,1,2,1,2]
輸出: 4
解:
第一個反應(yīng)用 map 來解,時間復(fù)雜度 O(n),是線性的,滿足題意,只不過空間復(fù)雜度消耗是 O(n),怎樣降低空間復(fù)雜度,在方法二中講;
解法一:用 map 來解:
/**
* @param {number[]} nums
* @return {number}
*/
var singleNumber = function(nums) {
let map = new Map();
for(let i = 0; i<nums.length;i++){
if(map.has(nums[i])){
map.set(nums[i],map.get(nums[i])+1);
}else{
map.set(nums[i],1)
}
}
for(let [key,value] of map.entries()){
if(value===1){
return key
}
}
};

解法二:用 異或 解
重點當(dāng)然就是在怎么理解:不使用額外空間來實現(xiàn)
其實就是就要在數(shù)組本身上進行操作,異或操作可以幫助我們實現(xiàn)這一點;
異或(eor)是一個數(shù)學(xué)運算符。它應(yīng)用于邏輯運算。兩個相等的數(shù)異或為0;兩個值不相同,則異或結(jié)果為1;一個不為0的數(shù)與0異或為這個數(shù)本身;
/**
* @param {number[]} nums
* @return {number}
*/
var singleNumber = function(nums) {
for (var i = 1; i < nums.length; i++) {
nums[0] = nums[0] ^ nums[i]; // 把所有的元素都異或到nums[0]上。
}
return nums[0];
};

以上就是前端JavaScript算法找出只出現(xiàn)一次的數(shù)字的詳細內(nèi)容,更多關(guān)于JavaScript算法只出現(xiàn)一次數(shù)字的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
next.js源碼解析getStaticProps?getStaticPaths使用場景
這篇文章主要為大家介紹了next.js源碼解析getStaticProps?getStaticPaths使用場景,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08
9種使用Chrome Firefox 自帶調(diào)試工具調(diào)試javascript技巧
這篇文章主要介紹了9種使用Chrome Firefox 自帶網(wǎng)頁調(diào)試工具調(diào)試javascript技巧2017-12-12

