題目描述:統計乙個數字在排序陣列中出現的次數。
輸入:每個測試案例包括兩行:
第一行有1個整數n,表示陣列的大小。1<=n <= 10^6。
第二行有n個整數,表示陣列元素,每個元素均為int。
第三行有1個整數m,表示接下來有m次查詢。1<=m<=10^3。
下面有m行,每行有乙個整數k,表示要查詢的數。
輸出:對應每個測試案例,有m行輸出,每行1整數,表示陣列中該數字出現的次數。
樣例輸入:
81 2 3 3 3 3 4 513
樣例輸出:
4
解:用二分查詢兩次,確定要查詢的數的下標的上下界。
#include #include #include using namespace std;
int a[1000001];
int find_lowest(int *a, int l, int r, int key)//a[l...r]
else if (a[mid] > key)
else
}if(isfind)
return lowest;
else
return -1;
}int find_highest(int *a, int l, int r, int key)
else if (a[mid] > key)
else
}if(isfind)
return highest;
else
return -1;
}int main()
scanf("%d", &m);
while(m--)
else
printf("0\n");
}
}return 0;
}
統計乙個數字在排序陣列中出現的次數
題目 統計乙個數字在排序陣列中出現的次數。思路 採用二分查詢的思想,尋找該數字第一次出現的下標和最後一次出現的下標,最後將兩個下標相減加1,便可得出出現的次數。具體的 實現如下所示 public class solution int firstindex getfirstindex array,0,...
c語言 統計乙個數字在排序陣列中出現的次數
題目 統計乙個數字在排序陣列 現的次數。比如 排序陣列 1。2,3,3,3,3,4。5 和數字3,因為3出現了4次。因此輸出4 有一種最簡單的演算法,遍歷。可是有比它效率更高的 先看遍歷 include include int num time int arr,int len,int a retur...
數字在排序陣列中出現次數
統計乙個數字在排序陣列中出現的次數。思路 求乙個數字在這個排序陣列中出現的次數,首先想到的是使用二分查詢,當我找到乙個位置,然後往前就可以到達最前面第乙個出現該數字的位置,往後就可以到達最後面最後乙個出現該數字的位置,然後兩個位置相減此時就得到該數字出現的次數。但是問題在於我用二分查詢到位置後,然後...