写在前面
最近想复习一下数据结构与算法相关的内容,找一些题来做一做。如有更好思路,欢迎指正。
目录
- 写在前面
- 一、场景描述
- 二、具体步骤
- 1.环境说明
- 2.代码
- 写在后面
一、场景描述
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数
,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
二、具体步骤
1.环境说明
名称 | 说明 |
---|---|
IntelliJ IDEA | 2019.2 |
2.代码
以下为Java版本实现:
public class Lc1_twoSum {public static void main(String[] args) {int[] nums = {2, 7, 11, 15};int target = 9;int[] result = twoSum(nums, target);System.out.println(Arrays.toString(result));}/*** O(n)** 思路:循环 + map** 返回值是int[]* 二数之和可以结合map变成二数之差** 定义一个map(key为数组中的值,value为key在数组中的位置)* 循环数组,得到nums[i], remain = target - nums[i]* 判断remain是否在map中* 是,返回i以及map.get(remain)* 否则,添加到map中* 循环结束,则为找不到这样的值**/private static int[] twoSum(int[] nums, int target) {Map<Integer, Integer> map = new HashMap<>();for (int i = 0; i < nums.length; i++) {// 用target-当前值,然后判断map中是否包含int remain = target - nums[i];if (map.containsKey(remain)) {return new int[]{map.get(remain), i};}map.put(nums[i], i);}throw new IllegalArgumentException("no solution");}
}
写在后面
如果本文内容对您有价值或者有启发的话,欢迎点赞、关注、评论和转发。您的反馈和陪伴将促进我们共同进步和成长。