LeetCode#1. Two Sum

来源:互联网 发布:淘宝情趣用品店铺名 编辑:程序博客网 时间:2024/05/21 06:41
  • 题目:给定一个整数数组nums和一个整数target,返回数组两个元素下标,这两个元素之和等于target(对于一个target,这个数组中只有两个元素之和会等于target)

例如:nums = [2, 7, 11, 15], target = 9
nums[0] + nums[1] = 2 + 7 = 9
所以返回结果为[0,1]

  • 思路:这道题如果用两个for循环肯定可以可以得出结果,但是效率太低。

    • 换一种思路:利用一次遍历,在遍历的过程中把
      (target-nums[i],i)用hashmap存储,这样只要判断Map中的key是否已经存在,若存在,则找到了这样一对数(时间复杂度为o(n))

    • 如果题目给出的数组是排好序的,还可以用两个指针来做(类似于二分查找

    • 但这个题目中不适合用两个指针(给数组排完序后,不好确定元素的原来的index)

    • 代码:

public class Solution {    public int[] twoSum(int[] nums, int target) {        int len = nums.length;        if(len < 2){            return null;        }        int[] result = new int[2];        Map<Integer,Integer> map = new HashMap<>();        for(int i = 0; i < len; i++){            int value = target - nums[i];            if(map.containsKey(nums[i])){                result[0] = map.get(nums[i]);                result[1] = i;                break;            }else{                map.put(value,i);            }        }        return result;    }}

数组中很多时候都可以用双指针来处理

0 0
原创粉丝点击