只出现一次的数字 (leetcode136)

一:解题思路

这道题目介绍2种方法。

解法一:利用位运算来做,数组中所有的数字都是成对出现的,只有一个是单独出现的,那么我们可以利用异或的性质来做。Time:O(n),Space:O(1)

解法二:利用集合set的特性,把所有数字添加到集合中(每个数字只出现一次),然后将集合中的数字乘以2减去原来数组元素和。Time:O(n),Space:O(n)

二:完整代码示例 (C、C++、Java、Python)

方法一C:

int singleNumber(int* nums, int numsSize) {
    int result = 0;
    for (int i = 0; i < numsSize; i++) {
        result ^= nums[i];
    }

    return result;
}

方法二C:

 

方法一C++:

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        if (nums.size() == 0) return -1;
        int result = 0;

        for (int i = 0; i < nums.size(); i++) {
            result ^= nums[i];
        }

        return result;
    }
};

方法二C++:

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        if (nums.size() == 0) return -1;
        set<int> s;
        int sum1 = 0;
        int sum2 = 0;

        for (int num : nums) {
            if (s.count(num) == 0) {
                s.insert(num);
                sum1 += num;
            }
            sum2 += num;
        }

        return 2 * sum1 - sum2;
    }
};

 

方法一Java:

class Solution {
            public int singleNumber(int[] nums) {
                   if(nums.length==0 || nums==null) return -1;
                   int result=0;
                   
                   for(int num:nums){
                       result^=num;
                   }
                   
                   return result;
            }
        }

方法二Java:

class Solution {
            public int singleNumber(int[] nums) {
                   if(nums.length==0 || nums==null) return -1;
                   Set<Integer> set=new HashSet<>();
                   int sum1=0;
                   int sum2=0;
                   
                   for(int num:nums){
                       if(!set.contains(num)){
                           set.add(num);
                           sum1+=num;
                       }
                       sum2+=num;
                   }
                   
                   return 2*sum1-sum2;
            }
        }

方法一Python:

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        length=len(nums)
        if length==0:
            return -1
        result=0
        for i in range(0,length):
            result^=nums[i]
        return result

 

Python写法二:

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        if not nums : return None
        sum1 = 0
        sum2 = 0
        s = set()
        for i in range(0,len(nums)):
            if nums[i] not in s:
                s.add(nums[i])
                sum1 += nums[i]
            sum2 += nums[i]

        return 2*sum1 - sum2

  

方法二Python:

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        length=len(nums)
        if length==0:
            return -1
        hash_set={}
        sum1=0
        sum2=0
        for i in range(0,length):
            if hash_set.get(nums[i]) is  None:
                hash_set[nums[i]]=i
                sum1+=nums[i]
            sum2+=nums[i]
        return 2*sum1-sum2
posted @ 2020-03-07 20:02  repinkply  阅读(218)  评论(0)    收藏  举报