leetcode:Single Number123 …

来源:互联网 发布:睡了兄弟的女朋友知乎 编辑:程序博客网 时间:2024/05/17 07:52
Single Number 1+2+3:
这是一系列题目,第一题是,给定一个整数数组,数组中每个数都出现了两次,除了一个数仅出现一次,要求找到这个数。方法很简单,位操作,一路 异或 过去,两次的数都被抵消了,剩下的就是那个数
第二题是每个数都出现了三次,找出那个出现了一次的数,就用一个32元素的数组,记录每个数的各二进制位是否为1,然后遍历这个32元素的数组,如果某元素的数值不能整除3,代表那个独一无二的数在该数位的二进制为1,从而可得。
第三题是,所有数都出现了两次,只有两个数仅出现一次。这个思路更巧妙,首先按照题目一的方法,求出所有数异或的结果,因为两个独一无二的数必定至少有一位二进制不同(即一个为0,一个为1),那么根据所有数在这一位是0还是1,把数据集分成两部分,分别求解即可。

Product of Array Except Self
给一个数组,求每个位置除了该数之外数组其他元素的乘积。
题目要求O(n)的时间复杂度和O(1)的空间复杂度,答案返回的ans数组不算在内。这题是自己局限了思路,总想着要开中间数组存储各元素之积,其实方法很简单,假设输入[a1,a2,a3,a4],先遍历一遍,ans数组存入结果为:[1,a1,a1*a2,a1*a2*a3];然后再反向遍历一遍,用输入数组作为中介,得到[a2*a3*a4,....,a1*a2*a3];
阅读全文
0 0