給定一個(gè)范圍在 1 ≤ a[i] ≤ n ( n = 數(shù)組大小 ) 的 整型數(shù)組煮仇,數(shù)組中的元素一些出現(xiàn)了兩次莹妒,另一些只出現(xiàn)一次铛绰。
找到所有在 [1, n] 范圍之間沒有出現(xiàn)在數(shù)組中的數(shù)字。
您能在不使用額外空間且時(shí)間復(fù)雜度為O(n)的情況下完成這個(gè)任務(wù)嗎? 你可以假定返回的數(shù)組不算在額外空間內(nèi)墓毒。
示例:
輸入:
[4,3,2,7,8,2,3,1]
輸出:
[5,6]
*/
1. 循環(huán)遍歷整個(gè)1~n的整型數(shù)組
var findDisappearedNumbers = function(nums) {
var i = 0
var max = nums.length
var arr = []
while( i < max){
i++
if (!nums.includes(i)) {
arr.push(i)
}
}
return arr
};
這種方法超出了時(shí)間限制吓揪,
但是我不知道為啥會(huì)超出時(shí)間限制,因?yàn)閕ncludes的原因嗎所计?
2. 用對(duì)象存下原數(shù)組柠辞,然后遍歷1~n,查找對(duì)象中不存在的鍵
var findDisappearedNumbers = function(nums) {
if (!nums.length) return []
var map = {}
nums.forEach(num=>map[num] = true)
var arr = []
for (var i = 1; i <= nums.length; i++) {
if(!map[i]){
arr.push(i)
}
}
return arr
};
上面這個(gè)方法沒超過時(shí)間限制主胧,但是仍需開辟一個(gè)新的空間(對(duì)象)