700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > java 给定一个整数数组 nums 和一个目标值 target 请你在该数组中找出和为目标值

java 给定一个整数数组 nums 和一个目标值 target 请你在该数组中找出和为目标值

时间:2021-07-05 20:06:43

相关推荐

java 给定一个整数数组 nums 和一个目标值 target 请你在该数组中找出和为目标值

标题:java,给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

一、示例

二、题解

方法一,暴力法:使用双重for循环,每取出一个值,遍历后面,看是否有nums[j]==target-nums[i]

for(int i=0;i<nums.length;i++){for(int j=i+1;j<nums.length;j++){if(nums[j]==target-nums[i]){return new int[]{i,j};}}}

方法二,使用HashMap ,其中value:存的是个数

基于求两个数组交集的HashMap的使用

//向map中赋值,若已经有值,则value++;for(int num:nums) {int count=map.getOrDefault(num, 0)+1;map.put(num, count);}//遍历nums数组,若找到满足条件的,则返回,假设都会有满足条件的for(int i=0;i<nums.length;i++) {int key=target-nums[i];int count=map.getOrDefault(key, 0);//找到了值,if(count>0) {if(nums[i]==key){//看是否为本身if(count<=1) {//为本身,continue;}}//不为本身,或!=for(int j=0;j<nums.length;j++) {if(nums[j]==key && i!=j) {//注意细节,[3,3],6要i!=jindex=j;break;}}return new int[] {i,index};}}

方法三,使用HashMap,不过和上面的不同,value:存的是索引,【满足条件就,放入HashMap】

for(int i=0;i<nums.length;i++) {if(map.containsKey(target-nums[i])) {return new int[] {map.get(target-nums[i]),i};}map.put(nums[i], i);}

完整代码如下:

/***给定一个整数数组 nums 和一个目标值 target,*请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。* @author dell**/public class TestSumArray {/*** 暴力法:使用双重for循环,每取出一个值,遍历后面,看是否有nums[j]==target-nums[i]* @param nums* @param target* @return*/public int[] solution0(int[] nums,int target) {for(int i=0;i<nums.length;i++){for(int j=i+1;j<nums.length;j++){if(nums[j]==target-nums[i]){return new int[]{i,j};}}}return null;}@Testpublic void test0() {int[] nums=new int[] {2,7,11,15};int[] solution = this.solution0(nums, 9);for(int num:solution) {System.out.print(num+" ");}}/*** 方法1,使用HashMap * 基于求两个数组交集的HashMap的使用* * @param nums* @param target* @return*/public int[] solution(int[] nums,int target) {HashMap<Integer,Integer> map=new HashMap<>();int index=-1;//对的值的索引//向map中赋值,若已经有值,则value++;for(int num:nums) {int count=map.getOrDefault(num, 0)+1;map.put(num, count);}//遍历nums数组,若找到满足条件的,则返回,假设都会有满足条件的for(int i=0;i<nums.length;i++) {int key=target-nums[i];int count=map.getOrDefault(key, 0);//找到了值,if(count>0) {if(nums[i]==key){//看是否为本身if(count<=1) {//为本身,continue;}}//不为本身,或!=for(int j=0;j<nums.length;j++) {if(nums[j]==key && i!=j) {//注意细节,[3,3],6要i!=jindex=j;break;}}return new int[] {i,index};}}return null;}@Testpublic void test() {int[] nums=new int[] {2,7,11,15};int[] solution = this.solution(nums, 9);for(int num:solution) {System.out.print(num+" ");}}/*** 方法2:使用HashMap * 不同与上一种的使用* @param nums* @param target* @return* @throws IllegalAccessException */public int[] solution2(int[] nums,int target) throws IllegalAccessException {HashMap<Integer,Integer> map=new HashMap<>();for(int i=0;i<nums.length;i++) {if(map.containsKey(target-nums[i])) {return new int[] {map.get(target-nums[i]),i};}map.put(nums[i], i);}throw new IllegalAccessException("没有满足的!!!");}@Testpublic void test2() throws IllegalAccessException {int[] nums=new int[] {2,2,2,7,11,15};int[] solution = this.solution2(nums, 4);for(int num:solution) {System.out.print(num+" ");}}/*** 方法3:使用HashMap * 不同与上一种的使用* @param nums* @param target* @return* @throws IllegalAccessException */public int[] solution3(int[] nums,int target) throws IllegalAccessException {HashMap<Integer,Integer> map=new HashMap<>();for(int i=0;i<nums.length;i++) {map.put(nums[i], i);}Set<Entry<Integer,Integer>> set=map.entrySet();for(Entry<Integer,Integer> entry:set) {System.out.println(entry.getKey()+"-->"+entry.getValue());}for(int i=0;i<nums.length;i++) {int value=target-nums[i];if(map.containsKey(value) && i!=map.get(value)) {return new int[] {i,map.get(value)};}}throw new IllegalAccessException("没有满足的!!!");}@Testpublic void test3() throws IllegalAccessException {int[] nums=new int[] {2,2,2,7,11,15};int[] solution = this.solution3(nums, 4);for(int num:solution) {System.out.print(num+" ");}}}

java 给定一个整数数组 nums 和一个目标值 target 请你在该数组中找出和为目标值的那 两个 整数 并返回他们的数组下标。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。