java陣列:氣泡排序以及稀疏陣列
阿新 • • 發佈:2021-09-05
題目:統計一個數字在排序陣列中出現的次數。
示例 1:
輸入: nums = [5,7,7,8,8,10], target = 8
輸出: 2
示例2:
輸入: nums = [5,7,7,8,8,10], target = 6
輸出: 0
一般解法直接暴力用for迴圈,但是效率不高
我們考慮用二分法解決,右邊界減去左邊界減去1 就是target出現的次數,程式碼如下
var search = function(nums, target) { let i =0 ;j = nums.length-1;let m,left,right //右邊界 while(i<=j){ m = Math.floor((i+j)/2) if長風破浪會有時,直掛雲帆濟滄海(nums[m]<=target){ i= m+1 }else{ j = m-1 } } right = i //因為是遞增的 targt大於最後一個值,那麼nums中肯定不存在這個target if(nums[j]!==target&&j>=0) return 0 i = 0 //左邊界 while(i<=j){ m = Math.floor((i+j)/2) console.log('m',m) if(nums[m]<target){ i= m+1 }else{ j = m-1 } } left = j return right - left - 1 };