题目描述
求一个排好序的数组中k的个数
解题思路
目的是练习stl和常用的库函数
题解一:使用有序多重集合multiset
class Solution {
public:
int getNumberOfK(vector<int>& nums , int k) {
multiset<int> s;
for(int x : nums) s.insert(x);
return s.count(k);
}
};
题解二:遍历vector,计数
class Solution {
public:
int getNumberOfK(vector<int>& nums , int k) {
int cnt = 0;
for(int x : nums)
if(x == k)
cnt++;
return cnt;
}
};
题解三:使用lower_bound和upper_bound,指针运算得出次数
class Solution {
public:
int getNumberOfK(vector<int>& nums , int k) {
auto l = lower_bound(nums.begin(), nums.end(), k);
auto r = upper_bound(nums.begin(), nums.end(), k);
return r - l;
}
};
还可以有这个
这个比第一个更好
nbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
这里的count()是哪里的函数?
https://wyqz.top/p/870124582.html#toc-heading-60可以看看这个学stl
nb,谢谢大佬
https://blog.csdn.net/qq_50285142/article/details/114026148
不客气,我也没学多久的,这个好像更详细
感谢
auto l = lower_bound(nums.begin(), nums.end(), k);
请问这个是什么意思?
哈哈懂了,分享~
为什么都用类 不用主函数啥的
同问
已经给出main函数了,但是没展现出来。这是让你自己创造一个函数,然后在main函数里引用这个class solution.
tql Orz
第二中方法定义一个排序容器,然后把原来的数组复制到容器中,再用cout输出个数
666666666666666
orz
tql
为什么第三种方法会报错
class Solution {
public:
int num=0;
int getNumberOfK(vector[HTML_REMOVED]& nums , int k) {
};
为什么我这个还会额外输出一个很大的数呢
佬,tql
非常感谢
lower_bound()函数范围不是更大一些么为什么要用upper_bound 减啊
数组有序。举个例子。[1,2,3,3,3,3,4,5]下标是从0到7,用upper_bound得到的是6,用lower_bound得到的是2。
详细见评论区另一条注释
ok悟了,谢谢大佬
tql
for(int x : nums)怎么用
遍历nums中的整数类型变量x,相当于Python中的 for…in…
好的,谢谢大佬
客气了
补充一下,这是迭代器