只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:

 

输入: [2,2,1]
输出: 1

示例 2:

输入: [4,1,2,1,2]
输出: 4

解决思路用求异 运算 ^ ,因为里面只有一个与其他不一样的数。相同的数会变成0.

    public int SingleNumber(int[] nums) 
    { 
    
     
        int ret=0;
        for(int i=0;i<nums.Length;i++)
        {
         
          ret ^= nums[i];
            
        }
        return ret;
        
    }

 

思路2。不是线性介,很暴力的解决

   public int SingleNumber(int[] nums) 
    { 
    
        
        bool isSame=false;
        int val=0;
        int temp=-1;
        for(int i=0;i<nums.Length;i++)
        {
            isSame=false;
            if(temp!=i)
            {
                for(int j=nums.Length-1;j>=0;j--)
                {
                    if(nums[i]==nums[j]&&i!=j)
                    {
                        temp=j;
                        isSame=true;
                        continue;
                    }
                }
                
                 if(isSame==false)
                {
                    val=nums[i];
                    return val;
                }
   
            }
            
                    }
        return val;
        
    }

 

点赞