vue實現購物車的小練習
阿新 • • 發佈:2020-12-23
故心故心故心故心小故衝啊
文章目錄
- 題目:一個長度為n-1的遞增排序陣列中的所有數字都是唯一的,並且每個數字都在範圍0~n-1之內。在範圍0~n-1內的n個數字中有且只有一個數字不在該陣列中,請找出這個數字。
- 解法一:遍歷迴圈判斷
- 解法二:二分查詢
題目:一個長度為n-1的遞增排序陣列中的所有數字都是唯一的,並且每個數字都在範圍0~n-1之內。在範圍0~n-1內的n個數字中有且只有一個數字不在該陣列中,請找出這個數字。
示例 1:
輸入: [0,1,3]
輸出: 2
示例 2:
輸入: [0,1,2,3,4,5,6,7,9]
輸出: 8
解法一:遍歷迴圈判斷
簡單明瞭,遍歷一遍陣列,當陣列元素的值不等於對應下標的時候,return 下標值.
特殊情況說明:當陣列為[0, 1]預設的是最後一個元素時會有問題,所以遍歷的時候需要遍歷到陣列的長度下標
var missingNumber = function(nums) {
for(let i = 0 ; i <= nums.length ; i++){
if(nums[i]!== i)
return i
}
};
解法二:二分查詢
利用二分查詢,整體流程是:
left 指向 0,right 指向最後一個元素
計算中間座標 mid:
如果mid = nums[mid],說明[0, mid]範圍內不缺失數字,left 更新為 mid + 1
檢查 left 是否小於等於 mid,若成立,返回第 2 步;否則,向下執行
返回 left 即可
注意,根據題意,可以知道mid > nums[mid]這種情況不存在。
例如[0,2,3,4,5,6,7,8,9,10]
left = 0 mid = 5 right=10
第一輪迴圈 0 <=10 mid === nums[mid] ? 5 => < 6 right = 5-1 = 4
left = 0 mid =2 right =4
第二輪迴圈 0<=4 mid === nums[mid] ? 2<3 => right = 2-1=1
第三輪迴圈 0<=1 mid = === nums[mid] ? 0 ===0 => left = 1
…
var missingNumber = function(nums) {
let left = 0,
right = nums.length - 1;
while (left <= right) {
let mid = Math.floor((left + right) / 2);
if (mid === nums[mid]) {
left = mid + 1;
} else if (mid < nums[mid]) {
right = mid - 1;
}
}
return left;
};