LeetCode#1. Two Sum

    xiaoxiao2021-03-25  74

    题目:给定一个整数数组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; } }

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

    转载请注明原文地址: https://ju.6miu.com/read-19517.html

    最新回复(0)