滴滴xor(nlogn)的还有一个O(N)的

思路是xor有性质a ^ b ^b =a;
所以统计前缀和是否出现过
 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
map <int, bool> mp;
int n, t, q, ans;
int main() {
    ans = 0;
    scanf("%d", &n);
    mp[0] = true;
    while (n--) {
        scanf("%d", &t);
        q ^= t;
        if (mp.count(q)) {
            q = 0;
            mp.clear();
            mp[0] = true;
            ans ++;
        } else {
            mp[q] = true;
        }
    }
    printf("%d\n", ans);
    return 0;
} 
O(n)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
bool mp[100001];
queue <int> que;
int n, t, q, ans;
int main() {
    ans = 0;
    scanf("%d", &n);
    memset(mp, 0, sizeof mp);
    mp[0] = true;
    while (n--) {
        scanf("%d", &t);
        q ^= t;
        if (mp[q]) {
            q = 0;
            while (!que.empty()) {
                mp[que.front()] = false;
                que.pop();
            }
            ans ++;
        } else {
            que.push(q);
            mp[q] = true;
        }
    }
    printf("%d\n", ans);
    return 0;
}
全部评论
果然一个个都是大神啊
点赞 回复 分享
发布于 2017-09-10 17:04
大佬,能说一说题意,以及注意事项?
点赞 回复 分享
发布于 2017-09-10 17:05
有代码思路吗??大佬
点赞 回复 分享
发布于 2017-09-10 17:07
大佬,能解释一下解法吗
点赞 回复 分享
发布于 2017-09-10 17:08
666
点赞 回复 分享
发布于 2017-09-10 17:09
#include<bits/stdc++.h> 学到了。。我都是include一堆
点赞 回复 分享
发布于 2017-09-10 17:10
大佬,能分享一下思路吗?
点赞 回复 分享
发布于 2017-09-10 17:14
跪求大佬解释,什么意思??
点赞 回复 分享
发布于 2017-09-10 17:16
666
点赞 回复 分享
发布于 2017-09-10 18:34
先马克一发
点赞 回复 分享
发布于 2017-09-10 18:47
我试了试如下输入, 5 3 0 1 2 4 4 输出 : 1 其实应该输出2 才对, [0] [4 4] 难道是我题意理解错了?
点赞 回复 分享
发布于 2017-09-10 18:52
mx大佬。我来啦😁
点赞 回复 分享
发布于 2017-09-10 18:59

相关推荐

点赞 评论 收藏
分享
无情咸鱼王的秋招日记之薛定谔的Offer:好拒信,偷了,希望有机会用到
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务