每日题解:LeetCode 167. 两数之和 II - 输入有序数组

题目地址

题目描述

解法

CPP

class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
       int low = 0, high = numbers.size() - 1;
        while (low < high) {
            int sum = numbers[low] + numbers[high];
            if (sum == target) {
                return {low + 1, high + 1};
            }
            if (sum < target) {
                ++low;
            }else{
                --high;
            }
        }
        return {-1, -1};
    }
}

JAVA

class Solution {
    public int[] twoSum(int[] numbers, int target) {
       Map<Integer,Integer> numMap=new HashMap();
            for(int i=0;i< numbers.length;i++){
             int difference=target-numbers[i];
             if(numMap.containsKey(difference)){
               return new int[]{numMap.get(difference)+1,i+1};
             }
             numMap.put(numbers[i],i);
         }
            return null;
    }
}

解题思路

hash表

思路与两数之和的解法一样,利hash表判断,目标值target与当前numbers[i]的差值,是否存在于hash表中,然后返两者的坐标值,这里稍微特殊处理一下,坐标值+1

   Map<Integer,Integer> numMap=new HashMap();
            for(int i=0;i< numbers.length;i++){
             int difference=target-numbers[i];
             if(numMap.containsKey(difference)){
               return new int[]{numMap.get(difference)+1,i+1};
             }
             numMap.put(numbers[i],i);
         }

双指针

由于题目已经说了数组为有序的,这样可以使用双指针解决,如果两个指针的和sum小于target,说明右边的值比较小,那就左指针往右移动,反之,说明右边值比较大
在这里插入图片描述
如图,双指针的和往右边是越来越大

 int low = 0, high = numbers.size() - 1;
        while (low < high) {
            int sum = numbers[low] + numbers[high];
            if (sum == target) {
                return {low + 1, high + 1};
            }
            if (sum < target) {
                ++low;
            }else{
                --high;
            }
        }
最近的文章

每日题解:LeetCode 454. 四数相加 II

题目地址个人博客地址题目描述给定四个包含整数的数组列表A,B,C,D,计算有多少个元组(i,j,k,l),使得A[i]+B[j]+C[k]+D[l]=0。为了使问题简单化,所有的A,B,C,D具有相同的长度N,且0≤N≤500。所有整数的范围在-228到228-1之间,最终结果不会超过231-1。例…

继续阅读
更早的文章

每日题解:LeetCode 35. 搜索插入位置

题目地址题目描述给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例1:输入:[1,3,5,6],5输出:2示例2:输入:[1,3,5,6],2输出:1示例3:输入:[1,3,5,6],7输出:4示例…

继续阅读