leedcode来一道随机简单题,写出题目描述和思路,在代码块中用Java和Python解答
题目描述:
给定一个整数数组nums和一个目标值target,请在数组中找出两个数,使它们的和等于target,返回这两个数的下标。
假设每个输入只对应唯一的答案,不能重复利用数组中同样的元素。
示例:
输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:nums[0]+nums[1]=2+7=9,因此返回[0,1]。
思路:
利用哈希表,遍历数组nums,将每个元素和它的下标存入哈希表中。同时,判断target-nums[i]是否在哈希表中出现过,如果出现过,就找到了满足条件的两个数,返回它们的下标即可。
Java代码:
class Solution { public int[] twoSum(int[] nums, int target) { Map<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < nums.length; i++) { int complement = target - nums[i]; if (map.containsKey(complement)) { return new int[] {map.get(complement), i}; } map.put(nums[i], i); } throw new IllegalArgumentException("No two sum solution"); } }
Python代码:
class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: d = {} for i, num in enumerate(nums): complement = target - num if complement in d: return [d[complement], i] d[num] = i return []
原文地址: https://www.cveoy.top/t/topic/Ajw 著作权归作者所有。请勿转载和采集!