題目描述
演算法分析
提交**:
class solution
}} if (data[start] != k)
return 0;
beg = start;
// 折半查詢結尾
start = 0;
end = data.size() - 1;
while (start < end)
}} last = end;
return (last - beg + 1);
}};
測試**:
// ********************測試**********************
void test(const char* testname, vectordata, int k, int expected)
// 查詢的數字出現在陣列的中間
void test1()
; test("test1", data, 3, 4);
}// 查詢的陣列出現在陣列的開頭
void test2()
; test("test2", data, 3, 4);
}// 查詢的陣列出現在陣列的結尾
void test3()
; test("test3", data, 3, 4);
}// 查詢的數字不存在
void test4()
; test("test4", data, 2, 0);
}// 查詢的數字比第乙個數字還小,不存在
void test5()
; test("test5", data, 0, 0);
}// 查詢的數字比最後乙個數字還大,不存在
void test6()
; test("test6", data, 6, 0);
}// 陣列中的數字從頭到尾都是查詢的數字
void test7()
; test("test7", data, 3, 4);
}// 陣列中的數字從頭到尾只有乙個重複的數字,不是查詢的數字
void test8()
; test("test8", data, 4, 0);
}// 陣列中只有乙個數字,是查詢的數字
void test9()
; test("test9", data, 3, 1);
}// 陣列中只有乙個數字,不是查詢的數字
void test10()
; test("test10", data, 4, 0);
}// 魯棒性測試,陣列空指標
void test11()
int main(int argc, char* argv)
《劍指offer》 數字在排序陣列中出現的次數
由排序陣列可以想到使用二分查詢法先查找到乙個待查的數字,然後再確定該數字第一次出現的位置和最後一次出現的位置,相減即可得到該數字在排序陣列中出現的次數。該方法的時間複雜度為o logn k第一次出現的下標 int getfirstk vector data,int lo,int hi,int k e...
劍指offer 數字在排序陣列中出現的次數
統計乙個數字在排序陣列中出現的次數。解法與思路 陣列時排序好的陣列,要找乙個數字在排序陣列中出現的次數。首先我們想知道這個數字是否在陣列出現了,這樣很自然我們就會想到在乙個排序的陣列中找乙個數字,那麼應該採用二分查詢,時間複雜度為o logn 如果這個數字在陣列中,返回這個數字對應的數字下標。從這個...
劍指offer 數字在排序陣列中出現的次數
題目 劍指offer 數字在排序陣列中出現的次數 樸素的思路不說了,掃一遍就行了。class solution return cnt 參考了這篇鏈結 劍指offer面試題 32.數字在排序陣列中出現的次數 的確是學到了更好的思路,主要也是自己對於排序陣列還是不夠敏感。對於陣列類題目,其實常見的處理思...