快捷搜索: 王者荣耀 脱发

LeetCode(简单)只出现一次的数字(c#)

题目为 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

一开始我的思路是对数组排序,然后遍历,比较数组前一个和后一个是否都不相等。代码如下

public int SingleNumber(int[] nums)
        {
          
   
            if (nums.Count()==1)
            {
          
   
                return nums[0];
            }
            nums = nums.OrderBy(e=>e).ToArray();
            if (nums[0]!=nums[1])
            {
          
   
                return nums[0];
            }
            if (nums[nums.Count()-1]!= nums[nums.Count() - 2])
            {
          
   
                return nums[nums.Count() - 1];
            }
            for (int i = 1; i < nums.Count()-2; i++)
            {
          
   
                if (nums[i]!=nums[i-1]&&nums[i]!=nums[i+1])
                {
          
   
                    return nums[i];
                }
            }
            return 0;
        }

看了官方题解 使用异或运算,因为每个数字要么出现一次,要么出现两次。 可使用异或运算 ⊕。异或运算有以下三个性质。

public int SingleNumber(int[] nums)
        {
          
   
            int ret = 0;
            foreach (int e in nums) ret ^= e;
            return ret;
        }
经验分享 程序员 微信小程序 职场和发展