Java算法给定一个整数数组,找出其中两个数相加等于目标值
2017-12-13 16:43
435 查看
给定一个整数数组,找出其中两个数相加等于目标值
例如:给定数组及目标值 nums = [2,7,11,15] ,target = 9
因为nums[0] + nums[1] = 2 + 7 = 9
返回[0,1]
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
例如:给定数组及目标值 nums = [2,7,11,15] ,target = 9
因为nums[0] + nums[1] = 2 + 7 = 9
返回[0,1]
/** * 使用辅助空间(使用哈希表,时间复杂度是O(n),空间复杂度:O(n),n是数组大小) * @param nums * @param target * @return 没有找到的话数组中数值就是{-1,-1},否则找到,其实我想返回null的,但是觉得返回null不礼貌,因为null有毒 */ public static int[] findTwo3(int[] nums, int target) { // 结果数组 int[] result={-1,-1}; // 目标是数组下标,所以键值对为<数值,数值对应数组下标>,这里要说一下,哈希表的查找的时间复杂度是O(1) HashMap<Integer, Integer> map=new HashMap<Integer, Integer>(); // 1.扫描一遍数组,加入哈希表,时间复杂度是O(n) for(int i=0;i<nums.length;i++) { map.put(nums[i], i); } // 2.第二次扫描,目标值-当前值,差值作为key,看看map里有木有,没有就下一个循环,直到数组扫描完毕或找到value,所以最坏情况的时间复杂度是O(n) for(int i=0;i<nums.length;i++) { // 得到第二个数的值 int two=target-nums[i]; // 如果存在第二个数的数组下标&&结果的两个数不是同一个数的值 if(map.containsKey(two)&&target!=2*two) { result[0]=i; result[1]=map.get(two); // 返回找到的两个数的数组下标 return result; } } // 没有找到 return result; }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
相关文章推荐
- Java算法给定一个整数数组,找出其中两个数相加等于目标值
- 两数之和:给定一个整数数组,找出其中两个数相加等于目标值
- leetcode-java.T001_TwoSum 给定一个整数数组,找出其中两个数满足相加等于你指定的目标数字
- 求解一个数组里等于给定整数和的两个数的O(n)时间复杂度算法
- 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target(容易)
- 有一个直方图,用一个整数数组表示,其中每列的宽度为1,求所给直方图包含的最大矩形面积。比如,对于直方图[2,7,9,4],它所包含的最大矩形的面积为14(即[7,9]包涵的7x2的矩形)。给定一个直方图A及它的总宽度n,请返回最大矩形面积。保证直方图宽度小于等于500。保证结果在int范围内。
- 有一个整数数组(包括正数 负数 和0),给定一个M值,要求数组中的一个或多个值相加的和等于M,有多少种组合?
- 找出数组里面任意两个数相加等于一个值k?
- 求解一个数组里等于给定整数和的两个数的O(n)时间复杂度算法
- 一个整数数组,有n个整数,如何找其中m个数的和等于另外n-m个数的和
- [算法学习]给定一个整型数组,找出两个整数为指定整数的和(2)
- 程序员面试100题之十:快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值(转)
- 关于一个数组中两个数的和等于给定数的问题
- 软件开发者面试百问-----有一个数组,里面是从1到1,000,000的整数,其中有一个数字出现了两次,你怎么找出那个重复的数字?
- 在数组中求出两个数,使他们的和等于给定的一个数
- [算法学习]给定一个整型数组,找出两个整数为指定整数的和(3)
- 计数排序——有一个数组,里面是从1到1,000,000的整数,其中有一个数字出现了两次,你怎么找出那个重复的数字?
- 给定一个无序整型数组,找出数组中未出现的最小整数
- (笔试中的题目)一个已经排序好的数组找到两个数字相加等于一个给定的数
- 给定一个整数数组,返回两个数字的索引,使它们相加得到一个特定目标值