題目描述:
給出乙個有序陣列 a,陣列中的每個數字都是 獨一無二的,找出從陣列最左邊開始的第 k 個缺失數字。
示例 1:
輸入:a = [4,7,9,10], k = 1
輸出:5
解釋:第乙個缺失數字為 5 。
示例 2:
輸入:a = [4,7,9,10], k = 3
輸出:8
解釋:缺失數字有 [5,6,8,…],因此第三個缺失數字為 8 。
示例 3:
輸入:a = [1,2,4], k = 3
輸出:6
解釋:缺失數字有 [3,5,6,7,…],因此第三個缺失數字為 6 。
1 <= a.length <= 50000
1 <= a[i] <= 1e7
1 <= k <= 1e8
方法1:
主要思路:
(1)直接模擬從小到大,查取第 k 個缺失的數字;
class
solution
--k;
if(k==0)
//若陣列中的元素遍歷完,則跳出迴圈,找陣列範圍之外的數字
if(pos==nums.
size()
)//缺失的數字
++cur_num;
}while
(k)return cur_num;}}
;
方法2:
主要思路:
(1)二分搜尋;
(2)每次比較當前位置下,從頭到當前位置缺失的數字數量是否小於 k ,若是小於 k ,則將left更新,否則更新 right,則最終的終止位置是left==right,此時從0到right(或者說left)的缺失的數字個數為》=k,則使用 right-1(或者left-1)的位置進行計算缺失的數字;
class
solution
intmissingelement
(vector<
int>
& nums,
int k)
while
(leftelse
}//根據找到的位置處,確定從0開始缺失的第 k 個數字
return nums[left-1]
+k-missing_num
(nums,left-1)
;}};
23 刪除有序陣列中的元素,陣列仍然有序 陣列
刪除乙個有序陣列的乙個元素,採用兩個陣列實現 實現 2017年6月19日16 16 31 功能 刪除陣列中乙個資料之後陣列依然有序 include stdio.h define m 9 int main int b m 1 int i,j,num bool flag printf 請輸入將要刪除的資...
在旋轉有序陣列中查詢元素
1.題目 給定乙個旋轉的有序陣列,比如是旋轉之後得到的,在陣列中查詢是否存在元素key。要求時間複雜度為o lgn 假定陣列中不存在重複元素。2.分析 從上面的選擇陣列可以發現,array middle 將陣列分成兩段,兩段中必有一段是有序的。這樣就可以使用二分查詢了。乙個變形的二分查詢。3.1 i...
1118 有序陣列的元素新增
題目描述 乙個非遞減有序的整型陣列有n個元素,給定乙個整數num,將num插入該序列的適當位置,使序列仍保持非遞減有序。要求定義乙個函式insert 將整數num插入在陣列a的適當位置上,函式原型如下 void insert int a,int n,int num 另外函式仍然呼叫以前定義過的函式p...