leetCode 1. Two Sum

看似是一道簡單的題,使用雙層for循環,依次取值,和之後的值依次相加,知道和爲期望值sh時輸出,時間複雜度O(n²)

public int[] twoSum(int[] nums, int target) {

        int result[] = new int[2];
        int length = nums.length;

        for (int i = 0; i < length; i++){
            for(int j = i+1; j<length;i++)
            {
                if(nums[i] + nums[j] == target){
                    result[0] = i;
                    result[1] = j;
                    return result;
                }
            }
        }

        return result;
    }

結果性能截圖
這裏寫圖片描述

上網搜的高性能算法,遍歷一遍數組後就可以獲得結果,思路初始化一個map,key爲數組的值,value爲數組的角標,一次取值v,如果Map.get(target-v)存在,則返回,否則將其值放入map,減少了比較的算法和一層for循環

 public int[] twoSum(int[] nums, int target) {

        Map<Integer,Integer> map = new HashMap<>();
        int arr[]= new int[2];
        int len = nums.length;

        for(int i = 0; i< len;i++){
            if(map.get(target-nums[i]) != null && map.get(target-nums[i]) >= 0)
            {

                arr[0] = map.get(target-nums[i]);
                arr[1] = i;
                return  arr;
            }else{
                map.put(nums[i],i);
            }
        }

        return arr;
    }

性能截圖
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章