本題源自leetcode 442
給定乙個整數陣列 a,其中1 ≤ a[i] ≤ n (n為陣列長度), 其中有些元素出現兩次而其他元素出現一次。
找到所有出現兩次的元素。
你可以不用到任何額外空間並在o(n)時間複雜度內解決這個問題嗎?
示例:
輸入:
[4,3,2,7,8,2,3,1]
輸出:[2,3]
第一種,遍歷整個陣列,將陣列中的i插入i-1的位置,然後遍歷陣列,如果nums[i]!=i+1也就是nums[i]本身,輸出
時間複雜度o(2n)~o(n)
var findduplicates = function(nums) else
}//let nums = [4,3,2,7,8,2,3,3,1]
//[4,3,2,-7,8,2,3,3,1]
//[4,3,2,-7,8,2,3,3,1]
//[4,3,-2,-7,8,2,3,3,1]
//[4,-3,-2,-7,8,2,3,3,1] nums[7-1]
//[4,-3,-2,-7,8,2,3,-3,1]
//[4,-3,-2,-7,8,2,3,-3,-1] i=4 nums[8-1]
//[4,-3,-2,-7,8,2,3,-3,-1] i=5 nums[2-1] nums[1] = -3 res[2]
//[4,-3,-2,-7,8,2,3,-3,-1] i=6 nums[3-1] nums[2] = -2 res[2,3]
//[4,-3,-2,-7,8,2,3,-3,-1] i=7 nums[3-1] nums[2] = -2 res[2,3,3]
//[4,-3,-2,-7,8,2,3,-3,-1] i=8 nums[1-1] nums[0] = 4 res[2,3,3]
以上方案都是針對,資料最多隻出現兩次,若出現三次,返回的結果就會重複。
面試題03. 陣列中重複的數字
找出陣列中重複的數字。
在乙個長度為 n 的陣列 nums 裡的所有數字都在 0~n-1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。
示例 1:
輸入:
[2, 3, 1, 0, 2, 5, 3]
輸出:2 或 3
限制:2 <= n <= 100000
鴿巢原理/抽屜原理
你有11個蘋果,需要放進10個抽屜,勢必會有乙個抽屜出現乙個以上的蘋果。
還是將i放進i的角標的空間裡
var findrepeatnumber = function(nums) else
} }return -1;
};//let arr = [0, 1, 2, 3, 4, 11, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
// [0, 1, 2, 3, 4, 11, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] i = 0,1,2,3,4
// [0, 1, 2, 3, 4, 11, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] i = 5 nums[5] = 11 nums[11]===nums[5] return nums[11]
let arr = [0, 1, 2, 3, 4, 11, 6, 7, 8, 9, 10, 12, 11, 13, 14, 15];
// [0, 1, 2, 3, 4, 11, 6, 7, 8, 9, 10, 12, 11, 13, 14, 15] i = 0,1,2,3,4
// [0, 1, 2, 3, 4, 11, 6, 7, 8, 9, 10, 12, 11, 13, 14, 15] i = 5 nums[5] = 11 nums[11]!==nums[5] 交換
// [0, 1, 2, 3, 4, 12, 6, 7, 8, 9, 10, 11, 11, 13, 14, 15] i = 6 nums[6]=6,7,8,9,10,11
// [0, 1, 2, 3, 4, 12, 6, 7, 8, 9, 10, 11, 11, 13, 14, 15] i = 12 nums[12] = 11 nums[11] === nums[12] return nus[11]
原地重複值判斷
題目 請設計乙個高效演算法,判斷陣列中是否有重複值。必須保證額外空間複雜度為o 1 給定乙個int陣列a及它的大小n,請返回它是否有重複值。思路 先將陣列原地排序,然後檢視是否有相鄰元素值相同。那麼能夠實現原地排序且時間複雜度小的是 非遞迴的堆排序。時間複雜度o nlogn 空間複雜度o 1 pub...
python 判斷列表重複
一 判斷單個列表中的元素是否存在重複 使用set方法去重後,和原list進行對比,如果相等,那麼說明原列表無重複,如果存在重複,說明列表存在重複 1 defis repect all l 2 repeatlist 3 setlist set l 4 flag true 5if len l len s...
LeetCode刷題之392 判斷子串行
我不知道將去向何方,但我已在路上!十六進製制中所有字母 a f 都必須是小寫。十六進製制字串中不能包含多餘的前導零。如果要轉化的數為0,那麼以單個字元 0 來表示 對於其他情況,十六進製制字串中的第乙個字元將不會是0字元。給定的數確保在32位有符號整數範圍內。不能使用任何由庫提供的將數字直接轉換或格...