哈希算法

38 阅读1分钟

哈希set

最长连续子数组的长度


给定一个未排序的整数数组,找到最长的长度 连续的元素序列。 例如,给定 [100,4,200, 1,3,2 ],最长的连续元素 序列为 [1,2,3,4 ]。返回其长度: 4。 你的算法应该运行在O(n) 的复杂性。


 public static int longestConsecutive(int[] nums){
        final HashSet<Integer> mset=new HashSet<Integer>();
        for(int i:nums)mset.add(i);
        int longest=0;
        for(int i:nums){
            int length=1;
            for (int j = i-1;mset.contains(j) ; --j) {
                mset.remove(j);
                ++length;
            }
            for (int j=i+1;mset.contains(j) ; ++j) {
                mset.remove(j);
                ++length;
            }
            longest=Math.max(longest,length);
        }
        return longest;
    }

两数之和


给定一个整数数组,找到两个数字,使它们加起来 具体目标号码。 函数twoSum应该返回两个数字的索引,使得它们 添加到目标,其中index1必须小于index2。请注意 您返回的答案 (index1和index2) 不是从零开始的。 您可以假设每个输入都只有一个解决方案。


  public static int[] twoSum(int[] nums,int target){
        final HashMap<Integer,Integer> map=new HashMap<>();
        for (int i = 0; i <nums.length ; i++) {
            map.put(nums[i],i);
        }
        for (int i = 0; i <nums.length ; i++) {
            final Integer v=map.get(target-nums[i]);
            if(v!=null&&v>i){
                return new int[]{i+1,v+1};
            }
        }
        return null;
    }