和爲target的兩個數

1.暴力

暴力算法時間複雜度O(n²),空間複雜度O(1)

public static int[] twoSum(int[] nums, int target) {
        for (int i = 0; i < nums.length; i++) {
            for (int j = i; j < nums.length; j++) {
                if(nums[i]+nums[j]==target) {
                    return new int[]{nums[i],nums[j]};
                }
            }
        }
        return null;
    }

2.排序+雙指針法

public static int[] twoSum1(int[] nums, int target) {
        Arrays.sort(nums);
        int left=0;
        int right=nums.length-1;
        while (left<right) {
            if(nums[left]+nums[right]>target) {
                right--;
            }else if (nums[left]+nums[right]<target) {
                left++;
            }else {
                return new int[]{nums[left],nums[right]};
            }
        }
        return null;
    }

3、利用map數組構造映射,遍歷nums[i]時,看target-nums[i]是否存在hash表中即可

public static int[] twoSum2(int[] nums, int target) {
        Map<Integer,Integer> map=new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            if(map.containsKey(target-nums[i])) {
                return new int[]{nums[map.get(target-nums[i])],nums[i]};
            }
            map.put(nums[i],i);
        }
        return null;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章