数组中只出现1、2次的值
如题:数组中只有1个元素是不重复的,其他的都是重复2个。例:data = [1,2,1]; f(data)=2
思路:异或方法 a^a=0, 0^b=b, a^b^a=b
1 | private static int FindOneNumsAppearOnce(int[] data) { |
如题:数组中只有2个元素是不重复的,其他的都是重复2个。例:data = [1,2,1,3,]; f(data)=[2,3]
思路:1,先排序再查找;2,利用哈希表统计,;3,承接题1的异或的思想:
- 遍历数组进行异或,得到2(
010
)和3(011
)的异或结果myxor=2(010
) - 初始化flag=1(
001
),通过与运算等于0则右移1位flag的方式,获取将该结果最低位为1的flag=2(010
) - 将数组中的数字分为两类:一类是与
010
按位与为0,另一类不为0; - 假如flag=1说明两个数的最低位不同,flag=2次最低位不同,flag=4。依次类推
1 | private static int[] FindTwoNumsAppearOnce(int[] data) { |
数组最大连续和
如题:数组中有正数和负数,求最大连续和。例:data = [1,3,-4,4,1]; f(data) = 5
思路:当前累加和 进行判断赋值或者重新开始累加
1 | private static int bigSumByArray(int[] data) { |
数组中俩元素的最大距离
如题:给定数组data,有多个元素;给定两个值;求这两个值在数组中最大距离,如果不存在返回-1
例:data = [1,3,4,2,5,5,3]; f(data, 3, 5) = 4;
思路:遍历数组,得到两个元素的下标值,计算临时距离结果,临时距离结果和旧的距离做比较大小确定去留。
1 | private static int f(int[] data, int a, int b) { |