[leetcode]数组类题目总结与回顾(287,268,136,1021,1014,905)

时间:2019-04-13
本文章向大家介绍[leetcode]数组类题目总结与回顾(287,268,136,1021,1014,905),主要包括[leetcode]数组类题目总结与回顾(287,268,136,1021,1014,905)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

今天做了数组类的这几道题(287,268,136,1021,1014,905)这几道题中有的是实在想不出来参考了其他人的解法,也有完全自己想出来的,有些虽然是easy的题,但仍想不出好的解决方法,通过这几道题感觉学到了许多,感觉还是需要整理与回顾一下。

首先来看下这两道题,对时间复杂度或是空间复杂度都有严格的要求:

136. Single Number

题目描述:

Given a non-empty 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?

Example 1:

Input: [2,2,1]
Output: 1

Example 2:

Input: [4,1,2,1,2]
Output: 4

解题思路:

   需要在线性时间和不使用额外的的内存完成。也就是说不能申请新的数组或其他数据结构来计数了。这道题主要是采用位运算来完成,异或运算是相同位异或结果位0,而不同位异或结果为1,利用这个特性,我们可以找出数组的Single Number。因为数组中只有一个数是只出现了一次,而其他数都出现了两次。那么出现了两次的数异或结果肯定为0,因此遍历一遍数组,将所有元素做异或操作,最后得到的数就是那个只出现了一次的数。

代码如下;

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        if not nums:
            return None
        res = 0
        for num in nums:
            res ^= num
        return res