小编shi*_*ilk的帖子

找到三个号码只出现一次

在长度为n的序列中,其中n = 2k + 3,即有k个唯一数字出现两次,并且三个数字仅出现一次.

问题是:如何找到仅出现一次的三个唯一数字?

例如,在顺序1 1 2 6 3 6 5 7 7中,三个唯一数字是2 3 5.

注意:3 <= n <1e6,数字范围为1到2e9

内存限制:1000KB,这意味着我们无法存储整个序列.

方法我试过(内存限制超过)?

我初始化一个树,当读入一个数字时,我尝试将其从树中删除,如果remove返回false(未找到),我将它添加到树中.最后,树有三个数字.它工作,但内存限制超过.

我知道如何使用位操作找到一个或两个这样的数字.所以我想知道是否

我们可以找到三个使用相同的方法(或一些类似的方法)?

找到一个/两个数字的方法只出现一次:

如果只有一个数字出现一次,我们可以对序列应用XOR来找到它.

如果有两个,我们可以先对序列应用XOR,然后将序列分成2个部分,结果为1,然后再将XOR应用于2个部分,我们将找到答案.

algorithm bit-manipulation sequence

16
推荐指数
4
解决办法
2249
查看次数

最长的子阵列,其元素形成连续序列

给定未排序的正整数数组,找到最长子数组的长度,其中排序的元素是连续的.你能想到O(n)解决方案吗?

例:

{10,5,3,1,4,2,8,7},答案是5.

{4,5,1,5,7,6,8,4,1},答案是5.

对于第一个例子,子阵列{5,3,1,4,2}在排序时可以形成连续序列1,2,3,4,5,它们是最长的.

对于第二个例子,子阵列{5,7,6,8,4}是结果子阵列.

我可以想到一个方法,对于每个子阵列,检查(最大 - 最小+ 1)是否等于该子阵列的长度,如果为真,那么它是一个连续的子阵列.花费最长的.但它是O(n ^ 2)并且不能处理重复.

有人可以提供更好的方法吗?

algorithm

16
推荐指数
1
解决办法
7983
查看次数

如果没有endl,则重载的ostream操作符分段错误

class foo {
    public:
    friend ostream& operator << (ostream &os, const foo &f);
    foo(int n) : a(n) {}
    private:
    vector <int> a;
};

ostream& operator << (ostream &os, const foo &f) {
    for (int i = 0; i < f.a.size(); ++i)
        os << f.a[i] << " ";
    os << endl; // why is this line a must?
}

int main(void) {
    foo f(2);
    cout << f << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,如果标记的行被删除,会出现段错误,有人可以解释一下原因吗?

c++ vector operator-overloading ostream

6
推荐指数
1
解决办法
1875
查看次数

查找数组中的最小唯一编号

数组中的最小唯一编号定义为 min{v|v occurs only once in the array} :例如,{1,4,1,2,3}的最小唯一编号为2.有没有比排序更好的方法?

algorithm

5
推荐指数
1
解决办法
1484
查看次数

奇怪的类型转换

我只是想不出以下代码.

int d = 5;
float f = 3.8f;
int ret = d*f;
Run Code Online (Sandbox Code Playgroud)

按照我的预期,退步是18,而不是19.为什么?

types

2
推荐指数
1
解决办法
65
查看次数

Python代码作为参数

如何将一段代码作为参数传递给python?

我试过这样,但它没有用.

$ python3'print("hello world")'

无法打开文件'打印(你好':[Errno 2]没有这样的文件或目录

python arguments

2
推荐指数
1
解决办法
1186
查看次数