数组中的几个问题
来源:互联网 发布:unity3d 雷电特效 编辑:程序博客网 时间:2024/06/06 05:17
一、找数组中出现一次两次三次=-=的数。。
记得去年四省赛的时候有一个题目是,给你一个数组,除了一个数出现了一次之外其他的数都出现了偶数次,让求这个数。
当时跟wjx一个队,那个tle整的。赛后听学长说用异或操作在O(n)时间内就可以处理出来。。
寒假的时候在leetcode看到一个一样的问题。。single number I 。完了还有single number II 。题目大致是给一个数组,除了一个数出现一次外其他的数都出现了三次,让在O(n)的时间内求出这个数。
明显跟一是差不多的,需要用到位运算。
大致思路是用类似I的。I当中可以用01 来代表出现奇数次和出现偶数次,这个题是出现三次,得用012来表示出现012及更多次的mod3。我们可以加一个数来表示出现几次。。
one表示出现一次,two表示出现两次,three表示出现三次。出现几次即是该位上1的个数是几。求的时候two是由one和当前数得来的,one是one和当前数得来的。three是由one和two得来的。也就是如果出现了一次并且又出现了两次,那么这一位肯定出现了三次了。然后再利用three去更新one和two,将他们清0;
最后得到的one就是出现一次的数,two就是出现两次的数。(前提条件是这堆数中只有一个数出现一次或者只有一个数出现两次,不能有既有一个数出现了一次又有另一个数出现了两次);
int main(){ int n; re; scanf("%d",&n); int one=0,two=0,three=0; int x; for(int i=0;i<n;i++){ scanf("%d",&x); two|=(x&one); one^=x; three=~(one&two); one&=three; two&=three; } printf("%d %d\n",one,two); return 0;}
同样推广开去,要求除了一个数外其他数都出现n次的数,可以设置one two three four ……然后对应的得到的就是答案。何止一个巧字了得。
二、暂无
0 0
- 数组中的几个问题
- js中一维数组和二位数组中的几个问题解释
- 开发中的几个问题
- JSP中的几个问题
- IE7中的几个问题
- 技术管理中的几个问题
- xjad使用中的几个问题
- 开发中的几个问题
- Endnote使用中的几个问题
- Linux中的几个问题
- Android中的几个问题
- hibernate使用中的几个问题
- Oracle中的几个问题记录
- boost log 中的几个问题
- IOS学习中的几个问题
- android studio中的几个问题
- 学习Hadoop中的几个问题
- jquery中的几个问题总结
- leetcode: Word Break
- HDU-1907 John
- 《JavaScript DOM 编程艺术》 第3章 笔记
- Oracle如何配置多个监听器
- 在ie客户端调用windows系统资源
- 数组中的几个问题
- 人造人你相信不?一起来看看
- 具有edit功能的combobox
- Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE解决方法
- xmpp学习笔记(二)
- Mac快捷键
- Leetcode - vector\stack - Evaluate Reverse Polish Notation
- [android tool]使用TortoiseGit把源码存到开源中国的git服务器上
- NYOJ-38 布线问题 最小生成树