神奇的亦或

一、一个整数数组,只有唯一一个元素出现一次,其他的元素都出现两次,找出这个元素。

  解析:根据a^a=0,只需将所有的元素亦或起来,得到的结果就是该元素。以LeetCode 136.为例,代码如下:

  

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int ans=0;
        for(int i=0;i<nums.size();++i)
            ans^=nums[i];
        return ans;
    }
};

二、一个整数数组,有两个不同的元素各出现一次,其他元素均出现两次,找出这两个元素。

  解析:设要求的两个元素为x、y。将所有元素的亦或起来,便得到这两个元素的亦或运算值,并且这个值一定不是0,即,在某位比特位(假设第k位)上值是1。所以根据第k位上的值将数组中的元素分成两部分,分别亦或起来得到的两个值便是x和y的值。以LeetCode 260.为例,代码如下:

  

class Solution {
public:
    vector<int> singleNumber(vector<int>& nums) {
        vector<int>ans;
        int a=0;
        for(int i=0;i<nums.size();++i)
            a^=nums[i];
        a=a^(a&(a-1));
        int x=0,y=0;
        for(int i=0;i<nums.size();++i)
            if(nums[i]&a) x^=nums[i];
            else y^=nums[i];
        ans.push_back(x);
        ans.push_back(y);
        return ans;
    }
};

  

三、有一个长度为n+1的数组,其中的元素是0~n这n+1个数。现在,这个数组中丢失了一个元素,请找回这个元素。

  解析:这道题太简单了。。。以LeetCode 268.为例,代码如下:

class Solution {
public:
    int missingNumber(vector<int>& nums) {
        int xor1=0;
        for(int i=0;i<nums.size();++i)
            xor1^=nums[i]^(i+1);
        return xor1;
    }
};

  

时间: 2024-10-10 09:54:51

神奇的亦或的相关文章

读《书都不会读,你还想成功——神奇读书法,职场菜鸟变CEO》

最近把<书都不会读,你还想成功——神奇读书法,职场菜鸟变CEO>看了一遍.这本书是前年在京东上偶然看到的,评论甚好,想看看究竟如何神奇,就买了下来.看了一遍,觉得是好书,是一本激励人通过疯狂读书改变人生的书.这次重温,亦能感受书中人物读书丰富之历程,遇阻而坚持不辍,为求改变而热情似火.对他们而言,读书,应该是一种生活习惯.通过读书,改变人的思维方式和行为,从而改变人生. 本书由韩国作家二志成.郑会一著,冯适宜译.阅读过程中,对作者诙谐而质朴的话语感觉亲切或深刻,有时不免嬉笑于色,手舞足蹈.现从

百病皆由痰作祟~一碗神奇的水?(生姜红糖水、姜糖水、中医)

百病皆由痰作祟~一碗神奇的水?                  (2015-04-13 16:21:45)转载▼       标签: 画者一剑 子墨 生姜红糖水 健康 分类: 生存与健康                                       董洪涛  2015-1-27        百病皆由痰作祟~一碗神奇的水?              在漫长的医疗 实践中,中医对痰病.痰证有一套比较完整的理论体系和治疗方法:将痰分为广义和狭义两大类.狭义的痰,一般是指呼吸系统的分泌

东方14模拟赛之noip2015/day1/3/神奇的幻方

总时间限制:  10000ms 单个测试点时间限制:  1000ms 内存限制:  128000kB 描述 幻方是一种很神奇的N*N 矩阵:它由数字 1,2,3, … …,N*N 构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将 1 写在第一行的中间. 之后,按如下方式从小到大依次填写每个数K(K= 2,3, …,N*N ): 若 (K−1) 在第一行但不在最后一列,则将K填在最后一行,(K−1) 所在列的右一列: 若 (K−1) 在最

【第二章】神奇的张大炮

一只剃了毛的猫崽和一条受了伤的手臂能做什么? 十个人里有九个人觉得剃了毛的猫崽应该埋到土里喂蚯蚓. 十个人里有九个人认为手臂受了伤应该去医院. 可是偏偏十个人里还剩下一个,这第十位不但认为剃了毛的猫崽和受了伤的手臂可以做文章,简直可以做大文章. 不但可以做大文章,简直还可以赚大钱. 最关键的是,他不但做了大文章,还赚了大钱. 因为这第十位不是别人,就是这位神奇的张大炮. 当一个人被认为神奇的时候,他就必定有了称得上神奇的地方. 张大炮就有张大炮神奇的地方. 张大炮神奇的地方实在不少,他的脏实在只

20145311王亦徐 《网络对抗技术》 MSF基础应用

20145311王亦徐 <网络对抗技术> MSF基础应用 实验内容 掌握metasploit的基本应用方式以及常用的三种攻击方式的思路 主动攻击,即对系统的攻击,不需要被攻击方配合,以ms08_067渗透为例 针对浏览器的攻击,以漏洞10_046为例 针对客户端的攻击,对具体应用的攻击,以对Adobe阅读器的漏洞攻击为例 最后是一个auxiliary模块的例子的应用 基础问题回答 1.解释exploit,payload,encode是什么 exploit是渗透攻击模块,利用系统服务应用中的漏洞

AC日记——神奇的幻方 洛谷 P2615(大模拟)

题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. 之后,按如下方式从小到大依次填写每个数K(K=2,3,…,N*N): 1.若(K−1)在第一行但不在最后一列,则将K填在最后一行,(K−1)所在列的右一列: 2.若(K−1)在最后一列但不在第一行,则将K填在第一列,(K−1)所在行的上一行: 3.若(K−1)在第一行最后一列,则将K填在(K−1)

一个神奇的递推公式--转自2108

志远兄发现了一个神奇的递推公式, 某些递推的题目可以看作, 一个个上三角阵, 而问题的解为(1,1) 至 (n,n) 的路径个数, 废话不多说, 上题上代码 以下转自http://www.cnblogs.com/--ZHIYUAN/p/5971367.html 小兔的棋盘 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 9447    A

JAVA注释的另一种神奇用法

每个JAVA程序员在写程序的时候一定都会用到注释,本篇博客不是讲怎么定义注释,而是说明注释神奇的一种写法. 1 /** 2 * 这是一个测试类 3 */ 4 public class Test { 5 /** 6 * 程序的入口 7 */ 8 public static void main(String[] args) { 9 new Test(); 10 } 11 } 以上是两个普通的多行注释,在IDEA的环境下,选中方法或者类名,按住Ctrl+Q(Eclipse开发环境下直接按住Ctrl然后

NOIP 2015普及组复赛Day1 T1 == Codevs4510 神奇的幻方

时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description: 幻方是一种很神奇的N∗N矩阵:它由数字 1,2,3, … … ,N∗N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将 1写在第一行的中间.之后,按如下方式从小到大依次填写每个数(K= 2,3, … ,N∗N ): 1.若 (K−1)在第一行但不在最后一列,则将 填在最后一行,(K−1)所在列的右一列: 2.若 (K