給定乙個包含n個數的陣列,其數字在1到n之間(包括1和n),可知至少存在1個重複的數,且每個重複的數隻重複1次,找出重複的數。
要求,時間複雜度o(n),空間複雜度o(1)。
思路:
將陣列進行排序,即nums[i]=i,由於這裡的數範圍是1-n,所以對應儲存為 nums[i]=i+1,例如nums[0]=1,nums[1]=2…
最後對陣列進行遍歷,找出nums[i] != i+1的nums[i]。需要在排序完之後遍歷,不能在排序的時候遍歷,容易把乙個數多次新增到結果集中。
**:
vector<
int>
findsecondvalue
(vector<
int> nums)
else
}else
}for
(int i =
0; i < nums.
size()
; i++
)//最後一次遍歷,找出重複的數
}return res;
}int
main()
; vector<
int> res=
findsecondvalue
( nums)
;return0;
}
給你乙個未排序的整數陣列,請你找出其中沒有出現的最小的正整數。
示例 1:
輸入: [1,2,0]
輸出: 3
示例 2:
輸入: [3,4,-1,1]
輸出: 2
示例 3:
輸入: [7,8,9,11,12]
輸出: 1
思路:
同上題相同。
**:
int
firstmissingpositive
(vector<
int>
& nums)
if(nums[i]
!=i+1)
else
}else
}int res=nums.
size()
+1;//若剛好從前到後都有,則返回n+1
for(
int i=
0;isize()
;i++)}
return res;
}
18年拼多多面試 陣列「山谷」
陣列裡的 山谷 是指乙個陣列a彙總的連續子陣列b滿足一下條件 1 b.length 3 2 存在滿足 0b 1 b i 1 b i 給定乙個陣列a,找出陣列a裡的最長 山谷 b的長度,如果沒有,則輸出0。輸入描述 每個測試輸入包含乙個測試用例,即給出整形陣列a,這裡保證0 a.length 1000...
找出陣列重複的數
1 在乙個長度為 n 的陣列裡的所有數字都在 0 n 1 的範圍內,找出任意乙個重複的數。簡明思路 按照題目要求,如果這個陣列裡面的數恰好沒有重複的數,則陣列下標跟對應的值相等。否則,當掃瞄到下標為 i 的數字時,比較這個下標的值 m 是不是等於 i 如果是,說明這個值就在它對應的下標下,繼續掃瞄 ...
287 找出陣列中重複的數
交換法主要思想是通過交換陣列元素,使得陣列上的元素在正確的位置上。遍歷陣列,如果第 i 位上的元素不是 i 1,那麼一直交換第 i 位和 nums i 1 位置上的元素。public static list test1 int nums list list newlist for int i 0 i...