网易笔试第二题 OR | 与

第二题题目写的是按位与,文字中给的时OR |,说的又是与
测试用例等于白给,查询为YES的都是插入的原值
我按照按位与来搞的,最后还是10%

按位与:
```
public static boolean contain(Set<Integer> set, int target) {
if (set.contains(target))
return true;

Set<Integer> select = new HashSet<>(set);
for (int i = 0; i < 32; i++) {
//target对应位为1 目标值全为1才行
if (bitofIndex(target,i) != 0) {
Set<Integer> tmp = new HashSet<>();
for (int num : select) {
if (bitofIndex(num, i) != 0) {
tmp.add(num);
}
}
select = tmp;
if (select.isEmpty())
break;
}
}

int end = 0xffffffff;
for (int num : select){
end = end & num;
}
return end == target;
}

static int bitofIndex(int a, int index) {
return a & (1 <<  index);
}
```

按位或思路是类似的,如果对应位为0,集合中所有位都为0才行,最后候选集合都按位或,target为1的位上只要有存在1的,得到的结果就和target相同

现在问题是当时应该也不是眼瞎了呀,题目很矛盾,我按照与来做了,结果应该是按位或来判断的,只过了直接判断集合的10%,伤心
#网易##笔试题目#
全部评论
ac #include <stdio.h> #include <unistd.h> #include <iostream> #include <vector> using namespace std; int main() { int q; cin >> q; vector<vector<int>> nums(30); while (q--) { int a, b; cin >> a >> b; if (a == 1) { for (int i = 25; i >= 0; i--) { if ((1 << i) & b) { nums[i].push_back(b); } } } else { bool flag = true; for (int i = 25; i >= 0; i--) { if (((1 << i) & b) == 0) { continue; } bool found = true; for (auto num: nums[i]) { if ((num | b) == b) { found = false; break; } } if (found) { flag = false; break; } } if (flag) { cout << "YES" << endl; } else { cout << "NO" << endl; } } } }
点赞 回复 分享
发布于 2019-08-03 18:50
第二题和第三题,真的没搞清楚题目要表达的意思
点赞 回复 分享
发布于 2019-08-03 18:01
题目的意思是,每行第一个数为1 的时候,就把第二个数添加到集合,每行第一个数为2的时候,就查询第二个数。。。我看了好久才看懂,时间都浪费了
点赞 回复 分享
发布于 2019-08-03 18:53
题意真的看不懂....
点赞 回复 分享
发布于 2019-08-03 18:34
按位或,题目都给出符号了
点赞 回复 分享
发布于 2019-08-03 17:57
没看懂题,出的什么鬼
点赞 回复 分享
发布于 2019-08-03 17:36
10%
点赞 回复 分享
发布于 2019-08-03 17:33
这题我都没看懂😌😌😌
点赞 回复 分享
发布于 2019-08-03 17:30

相关推荐

小鸡蛋吃布丁:上岸编制,考个偏远的四五线小县城的话那确实难度不高,工资三四千的,但是考发达地区的纯看实力和运气了
点赞 评论 收藏
分享
AAA专业长城贴瓷砖刘大爷:这样的简历我会直接丢进垃圾桶,花里胡哨的
点赞 评论 收藏
分享
废物一个0offer:认真的吗二本本科找人工智能岗位
点赞 评论 收藏
分享
评论
点赞
6
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务