leetcode面試題3
思路1:建立乙個陣列,將原陣列元素當做下標統計次數
int
findrepeatnumber
(int
* nums,
int numssize)
/*count times*/
for(
int i =
0;i < numssize;i++)}
/*no such element*/
return-1
;}
思路2:排序,鄰居比較
leetcode上,這個演算法無法通過,主要時間複雜度太高
只允許o(n)
/*快排*/
void
quicksort
(int
* nums,
int start,
int end)
;int
findrepeatnumber
(int
* nums,
int numssize)
}return-1
;}void
quicksort
(int
* nums,
int start,
int end)
nums[left]
= nums[right]
;while
(pivot >= nums[left]
&& left < right)
nums[right]
= nums[left];}
nums[left]
= pivot;
quicksort
(nums,start,left-1)
;quicksort
(nums,left+
1,end)
;}
思路3:對應更換,書中給定的思路
1.將tem元素歸位nums[tem]
2.已歸位的元素不會被打擾
3.n個元素至多歸位n次
int
findrepeatnumber
(int
* nums,
int numssize)}}
return-1
;}
面試題3 陣列中重複的數字
在乙個長度為n的陣列裡的所有數字都在0 n 1範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。1.方法一 把輸入的資料進行排序,排序後再判斷有無重複的數字,時間複雜...
面試題3 陣列中重複的數字
在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。雜湊表int findduplicatenum vector int...
面試題3 陣列中重複的數字
面試題3 找出陣列中重複的數字。在乙個長度為 n 的陣列 nums 裡的所有數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。示例 1 輸入 2,3,1,0,2,5,3 輸出 2 或 3 限制 2 n 100...