0
点赞
收藏
分享

微信扫一扫

leecode刷题--数字求和返回下标

hwwjian 2022-06-20 阅读 52

数字求和返回下标

方案1: 先添加元素到map,后进行查找

package com.company;


import java.util.HashMap;
import java.util.Map;


/**
* 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
*
* 示例:
* 给定 nums = [2, 7, 11, 15], target = 9
*
* 因为 nums[0] + nums[1] = 2 + 7 = 9
* 所以返回 [0, 1]
*
*/
public class Test {
public static void main(String[] args){


int[] nums = {2, 7, 11, 15};
int target = 17;
// 题目要求返回一个下标的数组
getTarget(nums, target);
}


private static void getTarget(int[] nums, int target) {
if(nums.length == 0 && target == 0){
return;
}
StringBuffer sb = new StringBuffer();


// 返回值是一个下标值,但求目标值却是用的本身值,所以我们需要一个map存放当前下标,以及当前下标的本身值,并把所有map放到一个集合中
Map<Integer, Integer> map = new HashMap<>();
for(int i = 0; i < nums.length; i++){
//把数组的值以及下标放入map中
map.put(nums[i], i);
}


for(int i = 0; i < nums.length; i++){
int num = target - nums[i];
// map中可以查到这个数 且 该数非本身,则存在该数字
if(map.containsKey(num) && map.get(num) != i){
sb.append(i);
sb.append(map.get(num));
break;
}
}


if(sb.length() != 0){
// 如果sb有值,则表示找到了目标target
System.out.println(sb.toString());
}else{
System.out.println("No two num add equals target");
}
}
}

方案2: 边查找边存储

package com.company;


import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;


/**
* 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
*
* 示例:
* 给定 nums = [2, 7, 11, 15], target = 9
*
* 因为 nums[0] + nums[1] = 2 + 7 = 9
* 所以返回 [0, 1]
*
*/
public class ArrayIndex {
public static void main(String[] args){

int[] nums = {2, 7, 11, 15};
int target = 17;
// 题目要求返回一个下标的数组
// getTarget(nums, target);
getTarget2(nums, target);

}


private static void getTarget2(int[] nums, int target) {
int[] arr = {};
Map<Integer, Integer> map = new HashMap<>();
for(int i = 0; i < nums.length; i++){
int num = target - nums[i];
if(map.containsKey(num)){
arr = new int[]{i, map.get(num)};
}else{
map.put(nums[i], i);
}
}
System.out.println(Arrays.toString(arr));
}
}
举报

相关推荐

0 条评论