编程猫的邮件收发室堆积了很多大小不一的邮件,猫院长派阿短去邮件收发室找一些邮件。阿短来到邮件收发室看到N件体积从小到大排列好的邮件。猫院长一共询问阿短M次,每次询问体积为K的邮件有多少件?的代码怎么写?
时间: 2023-04-03 10:03:16 浏览: 183
可以使用二分查找来解决这个问题。首先将所有邮件按照体积从小到大排序,然后对于每次询问,使用二分查找找到第一个体积大于等于K的邮件的位置,再使用二分查找找到第一个体积大于K的邮件的位置,两个位置之间的差就是体积为K的邮件数量。
具体代码如下:
int binarySearch(vector<int>& mails, int target) {
int left = 0, right = mails.size() - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (mails[mid] >= target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return left;
}
int countMails(vector<int>& mails, int k) {
int left = binarySearch(mails, k);
int right = binarySearch(mails, k + 1);
return right - left;
}
// 示例用法
vector<int> mails = {1, 2, 3, 3, 4, 5, 5, 5, 7};
int k = 5;
int count = countMails(mails, k); // count = 3
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)