劍指 53 1 數字在排序陣列中出現的次數

2021-08-21 10:35:19 字數 1414 閱讀 5013

題目描述

演算法分析

提交**:

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.數字在排序陣列中出現的次數 的確是學到了更好的思路,主要也是自己對於排序陣列還是不夠敏感。對於陣列類題目,其實常見的處理思...