力扣大战——两数之和(对应LeetCode第一题)

DBC 1.3K 0
温馨提示

第一种方法,相信看起来很简单,直接for大王在此!!![aru_43] 第二种使用了一种哈希表的方式来进行操作。

总结一下:

  • for大王:
    • 时间复杂度:O(N²)
    • 空间复杂度:O(1)
  • 哈希表:
    • 时间复杂度:O(N)
    • 空间复杂度:O(N)

典型的空间换时间,Nice![aru_51]

 

代码展示

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

/**
 * 题目:两数之和
 * @author DBC
 * @date 2022/5/9 14:20
 */
public class Test01 {

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

    public static int[] twoSum2(int[] nums, int target) {
        Map<Integer, Integer> hashtable = new HashMap<Integer, Integer>();
        for (int i = 0; i < nums.length; ++i) {
            // containsKey方法——判断是否包含指定的键名
            if (hashtable.containsKey(target - nums[i])) {
                return new int[]{hashtable.get(target - nums[i]), i};
            }
            hashtable.put(nums[i], i);

        }

        return new int[0];
    }


    public static void main(String[] args) {
        int[] list= {5,2,3,4,9,6,7};
        // i:0,key:5,value:0,i:0
        // i:1,key:2,value:1
        // i:2,

        System.out.println(Arrays.toString(twoSum(list, 5)));

        System.out.println(Arrays.toString(twoSum2(list, 5)));
    }
}

结果输出

[1, 2]
[1, 2]

发表评论 取消回复
表情 图片 链接 代码

分享