1.两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

示例:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]


方法一:循环遍历

public int[] twoSum(int[] nums, int target) {
    int p=0,q=0;
    int[] newNums=new int[2];
    for (int i = 0; i < nums.length-1; i++) {
        for (int j = i+1; j < nums.length; j++) {
            if (nums[i]+nums[j]==target){
                p=i;
                q=j;
            }
        }
    }
    newNums[0]=p;
    newNums[1]=q;
    return newNums;
}

方法二:哈希表 以空间换时间

  • 初始化一个空的哈希表map,用于存储数字和对应的索引。
  • 遍历数组 nums,对于每个数字 nums[i]:
    -- 计算它的补数(j = target - nums[i])检查哈希表中是否已经存在这个补数:
    -- 如果存在,说明找到了两个数,直接返回它们的索引。
    -- 如果不存在,将当前数字nums[i] 和它的索引 i 存入哈希表,继续遍历。
  • 如果遍历结束后没有找到符合条件的两个数,返回空数组。
public static int[] twoSum2(int[] nums, int target) { 
    Map<Integer, Integer> map = new HashMap<>(); 
    for (int i = 0; i < nums.length; i++) { 
        //计算所需要的补数 
        int j=target-nums[i]; 
        //如果补数存在 返回补数索引和当前索引 
        if (map.containsKey(j)) { 
            return new int[]{map.get(j),i}; 
        } 
        //补数不在 将当前数字和索引存入哈希表 
        else { 
            map.put(nums[i],i); 
        } 
    } 
    return new int[0]; 
}
posted @ 2025-03-12 10:40  乘除法  阅读(27)  评论(0)    收藏  举报