該題目並非難題,但該題目考察目的是正確的選擇合適的查找方法。題目中有一個關鍵詞是:排序數組,也就是說,該數組已經排好了,我一開始直接遍歷了一遍數組,有相同的就加1,代碼量雖然不多,但這很顯然是效率很低的方法。因此又從新碼了二分查找法的代碼。數組
根據題意,使用這種方法要考慮到兩點:spa
1. 把二分查找法先構造出來。指針
2. 統計數字k在數組中出現次數。code
class Solution { public int GetNumberOfK(int[] data, int k) { // write code here // 魯棒判斷 if (data.Length == 0) return 0;
// 使用二分查找法:定義前指針min,後指針max,中間指針mid,計數器count int min = 0,max = data.Length - 1,mid = 0,count = 0;
// 構建二分查找模型 while(min <= max) { if (min > max) break; mid = (max+min)/2; if(data[mid] == k) { break; } else if(data[mid]<k) { min = mid+1; } else { max = mid-1; } }
// 若存在中間數 == k,給count賦值爲1 if(data[mid] == k) { count = 1; }
// 統計一個k在排序數組中出現的次數 for (int i = 1; i < data.Length; i++) {
// 定義循環中止條件,提升效率 bool firstFlag = false; bool secondFlag = false;
// 左側重複數的累加 if (mid - i >= 0 && data[mid - i] == k) { firstFlag = true; count++; }
// 右側重複數的累加 if (mid + i < data.Length && data[mid + i] == k) { secondFlag = true; count++; }
// 循環中止條件 if (firstFlag == false && secondFlag == false) { break; } }
// 返回次數 return count; } }
作題目的時候最好先本身寫寫畫畫,設置好邏輯關係很是重要!!blog