LeetCode总结整型数组类题目

寻找唯一的单个数

题目:https://leetcode.com/problems/single-number/

武器:利用map计算次数,线性时间。但是需要O(n)存储空间

结果:未通过

新武器:XOR操作

异或的运算方法是一个二进制运算:

1^1=0

0^0=0

1^0=1

0^1=1

两者相等为0,不等为1.

(1) a ^ b = b ^ a;
(2) (a ^ b) ^ c = a ^ (b ^ c);
(3) a ^ a = 0, a ^ 0 = a;
the ^ means XOR.

a ^ b ^ b ^ c ^ c = a ^ 0 ^ 0 = a,只有一个单个元素,所以最后异或的结果就是单个数字。

class Solution {
    public int singleNumber(int[] nums) {
       int result=0;
        for(int i=0;i<nums.length;i++){
            result^=nums[i];
        }
        return result;
    }
}

移动0到数组尾部

题目:https://leetcode.com/problems/move-zeroes/

武器: 两个指针,基于交换。但是比较麻烦。简单思路是直接覆盖

结果:未通过

新武器:如果是0,没有必要交换,直接覆盖,最后空余位置直接添加0就可以。

猜你喜欢

转载自blog.csdn.net/hanruikai/article/details/86510293