38 數字在排序陣列中的次數

2021-07-04 04:36:14 字數 1000 閱讀 5662

題目描述:

統計乙個數字在排序陣列中出現的次數。

如輸入排序陣列和數字3,由於3在陣列中出現了 4 次,因此輸出4.

解析:

有序陣列中查詢乙個數可以聯想到二分查詢

如例子中,要查詢3的次數,二分查詢,找到3後,它的左右兩邊可能都有3,因此兩邊都要查詢,如果3在陣列中出現了n次,則時間複雜度o(n),二分查詢沒有起到作用。

假設我們要在陣列中查詢 k 的次數。因為陣列是有序的,那麼只要找到陣列中的第乙個 k 和最後乙個 k就能夠確定出現的次數。

我們不必查詢到每乙個 k ,只需查詢 2 個 k ,因此時間複雜度 o(logn)

#include 

using

namespace

std;

int getfirstk(int nums, int start, int end, int k) else

if (nums[mid] > k) else

return firstk;

}int getlastk(int nums, int start, int end, int k) else

if (nums[mid] < k) else

return lastk;

}int getcountsofk(int nums, int start, int end, int k)

int main() ;

int k = 4;

cout

<< getcountsofk(nums, 0, sizeof(nums)/sizeof(nums[0])-1, k) << endl;

}

Q38 數字在排序陣列中出現的次數

public class q38數字在排序陣列中出現的次數 system.out.println test.getnumberofk array,3 public int getnumberofk int array,int k return number 利用遞迴找出第一次出現k的位置 publi...

面試題38 數字在排序陣列中出現的次數

問題說明 1.給定排序的陣列,例如從小到大已經排序。2.給定某個查詢關鍵字,求出該關鍵字出現的次數。3.完全遍歷一遍,時間複雜度為o n 並未充分利用排序的資訊。4.需要借鑑二分查詢的思想改進,演算法的時間複雜度為o logn package com.zhang.csdn author pizi d...

面試題38 數字在排序陣列中出現的次數

統計乙個數字在排序陣列中出現的次數。陣列是排序的,所以重複出現的數字是相鄰排列的。用二分查詢演算法,找到第一次出現的位置,和 最後一次出現的位置。判斷第一次出現的位置條件為 當前數字的前乙個是否與之相等,若是則繼續查詢,否則該位置就是第一次出現的位置。判斷最後一次出現的位置條件為 當前數字的後乙個是...