题目描述
blablabla
C++ 代码
class Solution {
public:
int getNumberOfK(vector<int>& nums , int k) {
if (!nums.size()) return 0;
if (k < nums[0] || k > nums[nums.size() - 1]) return 0;
int n = nums.size();
int first = getFirst(nums, 0, k, n - 1);
int last = getLast(nums, 0, k, n - 1);
return last - first + 1;
}
int getFirst(vector<int>& nums, int l, int k, int r) {
while(l < r) {
int mid = l + r >> 1;//大于等于k的最小值。
if (nums[mid] >= k) r = mid;
else l = mid + 1;
}
return l;
}
int getLast(vector<int>& nums, int l, int k, int r) {
while(l < r) {
int mid = l + r + 1 >> 1;//小于等于k的最大值。所以找不到k的时候,last比first小1,返回的结果也是正确的。
if (nums[mid] <= k) l = mid;
else r = mid - 1;
}
return l;
}
};
这是用来练习stl和库函数的吧,为什么要搞的这么麻烦啊
这个解法是错误的,比如 int[] nums = {1, 3, 4, 7, 8}; int k = 5; 再比如int[] nums = {2, 3, 4, 7, 9, 9, 10}; int k = 4;
因为只要k是在数组大小范围内的,即使数组中不含k, l和r始终会相遇,这时候返回l就很荒谬
代码看懂了吗,看我最终返回的结果是啥,把程序看懂了再。
牛大了,菜鸡是看不懂,我只知道你这代码不AC
我看了下,测试用例增加了,k只有在不是在数组范围内才会出问题,在范围内是不会出问题的,我在第5行增加了一句判断,可以通过测试了,你可以试试,愿意看就好好说话。
老哥我寻思我也没阴阳怪气啊,可能上面说了荒谬不太好,本来就是抱着学习的态度来看的,然后发现有问题才指出来的
这个代码提交不了啊
想法很棒,但是答主代码中的注解是不是有点问题呀,应该是first=大于等于k的最小值和last=小于等于k的最大值吧
你说的对,非常感谢