Medium 136题 Single Number

来源:互联网 发布:apache 配置https证书 编辑:程序博客网 时间:2024/05/29 09:48

题目:

Given an array of integers, every element appears twice except for one. Find that single one.

Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

首先想到的是下面的暴力解法,也调试了半天,而且复杂度太可怕了,flaga用于记录是否遍历到了该元素,flag用于记录该大循环中有无相等的,而且首先没考虑到[2,2,1]这种情况。

<pre name="code" class="cpp">class Solution {public:    int singleNumber(vector<int>& nums) {      vector <int> flaga(nums.size(),0);        int result;        int i,j;        int flag=0;        for(i=0;i<=nums.size()-1;i++)        {        if(flaga[i]!=1)        {            for(j=i+1;j<=nums.size()-1;j++)            {                if(nums[i]==nums[j])                {                    flaga[j]=1;                    flag=1;                    break;                }            }            if(flag!=1)            {                result=nums[i];                break;            }            flag=0;        }        }         return result;    }};



然后就是又参考了网上采用异或的解法。。。人家轻松linear复杂度。。异或

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

另外通过查阅资料还发现了一个小tip 在for循环中++i比i++要快!参考博客http://blog.csdn.net/zy1691/article/details/4849808


0 0
原创粉丝点击