【Algorithm】二分排序小技巧
*先說現象:
在一個整形陣列,
使用二分法找大於整數k的第一個數時,可以用k+0.5來找
同理找等於整數k的第一個數時,可以用k-0.5來找
其實很好理解,二分法找的是插入這個數字的位置,如果這個數字存在,對於他插入到相同數字序列中的哪個位置是不可預知的。
而取在數的中間,得到的值,是這個數應該存在的位置,而佔住這個位置的數以及其之後的數應該往後移(因為陣列沒有這個數字k+0.5或者k-0.5,所以不用考慮相同數字序列中的位置)。
*結論:
二分查詢時,要找某個位置,可以用某個位於單位之間的數進行二分查詢,這樣就可以找到此數如果存在,應存在的位置。
NK網上面的題
統計一個數字在排序陣列中出現的次數。
public int GetNumberOfK(int [] array , int k){
}
答案
看見有序,就知道是二分查詢了
因為是整形陣列,所以就可以借用上面的方法
public class Solution {
int GetNumberOfK(int[] data ,int k) {
return biSearch(data, k+0.5) - biSearch(data, k-0.5) ;
}
private int biSearch(int[] data, double num){
int s = 0, e = data.length-1;
while(s <= e){
int mid = (e - s)/2 + s;
if(data[mid] < num)
s = mid + 1;
else if(data[mid] > num)
e = mid - 1;
}
return s;
}
public static void main(String[] args) {
Solution s = new Solution();
int[] a = {1,2,3,3,3,3};
System.out.println(s.GetNumberOfK(a, 3));
}
}
相關文章
- 408 DataStructure_Algorithm - 8.3 交換排序ASTStructGo排序
- Python小技巧:一種字串的排序方式Python字串排序
- Algorithm-sort 排序演算法 pythonGo排序演算法Python
- Laravel 根據 relation sum 結果排序的小技巧Laravel排序
- 排序演算法:二分插入排序排序演算法
- 排序演算法——二分插入排序排序演算法
- 二分答案解題技巧
- 開發小技巧之:unicode的排序和正則匹配Unicode排序
- [dp 小計] wqs 二分
- 排序演算法之——二分插入排序演算法排序演算法
- 微信小程式小技巧微信小程式
- algorithmGo
- KMP Algorithm 字串匹配演算法KMP小結KMPGo字串匹配演算法
- Mac 小技巧Mac
- PHP 小技巧PHP
- JavaScript小技巧JavaScript
- git小技巧Git
- JavaScript?小技巧JavaScript
- css小技巧CSS
- Ubuntu小技巧Ubuntu
- js小技巧JS
- git 小技巧Git
- windows 小技巧Windows
- Codeforces 484B Maximum Value(排序+二分)排序
- 二分查詢法小記
- 小程式拖拽排序排序
- 排序——選擇排序小練習(二)排序
- 排序——選擇排序小練習(一)排序
- Kruskal algorithmGo
- 順序表實現二分排序排序
- Android 小技巧Android
- Windows使用小技巧Windows
- ruby on rails 小技巧AI
- HTML + CSS 小技巧HTMLCSS
- Eclipse小技巧Eclipse
- photoshop使用小技巧
- 卡常小技巧
- 拓撲排序小結排序