likes
comments
collection
share

【每日一道算法题】给出一个整数数组,请在数组中找出两个加起来等于目标值的数

作者站长头像
站长
· 阅读数 9

给出一个整数数组,请在数组中找出两个加起来等于目标值的数, 你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足 index1 小于index2.。注意:下标是从1开始的 假设给出的数组中只存在唯一解 例如: 给出的数组为 {20, 70, 110, 150},目标值为90 输出 index1=1, index2=2

解法一:暴力破解法

import java.util.*;


public class Solution {
    /**
     * 
     * @param numbers int整型一维数组 
     * @param target int整型 
     * @return int整型一维数组
     */
    public int[] twoSum (int[] numbers, int target) {
        int[] ans = new int[2];
        for(int i=0;i<numbers.length;i++){
            for(int j=i+1;j<numbers.length;j++){
                if(int[i]+int[j]==target){
                    ans[0]=i+1;
                    ans[1]=j+1;
                    return ans;
                }
            }
        }
        return ans;
    }
}
    

解法二:哈希表

首先我们定义一个哈希表map,将number[i]进行标记,即map[number[i]]=i
然后使用一层for循环查询map里面有没有target-number[i]
如果有就返回map[target- number[i]] + 1i + 1
如果没有就查询下一个
public class Solution {
    /**
     * 
     * @param numbers int整型一维数组 
     * @param target int整型 
     * @return int整型一维数组
     */
    public int[] twoSum (int[] numbers, int target) {
        HashMap<Integer,Integer> map = new HashMap<>();
        for(int i=0;i<numbers.length;i++){
            if(map.containsKey(target-numbers[i])){
                return new int()[map.get(target-numbers[i])+1,i+1];
            }else{
                map.put(numbers[i],i);
            }
        }
        return new int[2];
    }
}
转载自:https://juejin.cn/post/6952790647430447140
评论
请登录