我知道二分搜索是如何工作的,但当我需要实现二分搜索时,我总是会犯一些小错误。
class Solution {
public:
int findDuplicate(vector<int>& nums) {
int low = 1, high = nums.size() - 1;
while (low < high) {
int mid = low + (high - low) * 0.5;
int cnt = 0;
for (auto a : nums) {
if (a <= mid) ++cnt;
}
if (cnt <= mid) low = mid + 1;
else high = mid;
}
return low;
}
};
Run Code Online (Sandbox Code Playgroud)
有几个地方让我很困惑:
1. while循环的条件low<high or low<=high
2. a<=mid or a<mid …
我写了以下代码
#include<iostream>
using namespace std;
extern int var = 0;
int main(void)
{
var = 10;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我用了
g++ -std=c++11 test.cpp -o test
Run Code Online (Sandbox Code Playgroud)
和
g++ test.cpp -o test
Run Code Online (Sandbox Code Playgroud)
编译代码.我收到了以下警告
test.cpp:44:12: warning: 'extern' variable has an initializer [-Wextern-initializer]
extern int var = 0;
^
1 warning generated.
Run Code Online (Sandbox Code Playgroud)
这是什么意思?我需要担心吗?我怎么能避免呢?非常感谢〜
我想在函数结束时返回一个空向量.以下是否完全相同?如何理解他们每个人?
return vector<int>();
return vector<int>{};
return NULL;
Run Code Online (Sandbox Code Playgroud)
以下是我的理解:
1. vector<int>()表示创建一个空的矢量对象,它是未初始化的,因此它是NULL.
2. vector<int>{}表示创建一个大小为0的空向量.
大小0和NULL之间有区别吗?非常感谢〜