P2. 求和为给定值的两个数和P3. 有序数组中求和为给定值的两个数
求和为给定值的两个数
package com.pxj.cuanfa05;
import java.util.HashMap;
import java.util.Map;
public class OneClassz {
public static void main(String[] args) {
OneClassz oneClassz = new OneClassz();
int[] arr = {1, 2, 3, 4, 8, 10};
int[] a = oneClassz.arryGet(arr, 10);
for (int i : a) {
System.out.println(i);
}
System.out.println("---------------------------------");
int[] ints = oneClassz.setzMap(arr, 10);
for (int anInt : ints) {
System.out.println(anInt);
}
}
public int[] arryGet(int[] nums,int tager){
for (int i=0; i<nums.length;++i){
for (int j=i+1;j<nums.length;++j){
if(nums[i]+nums[j]==tager){
return new int[]{i,j};
}
}
}
return new int[]{-1,-1};
}
public int[] setzMap(int[] nums,int tager){
Map<Integer, Integer> map = new HashMap<>();
for (int i=0;i<nums.length;++i){
int a= tager-nums[i];
if(map.containsKey(a)){
return new int[]{map.get(a),i};
}
map.put(nums[i],i);
}
return new int[]{-1,-1};
}
}
有序数组中求和为给定值的两个数
package com.pxj.cuanfa05;
import jdk.nashorn.internal.ir.CallNode;
public class TwoClassz {
public static void main(String[] args) {
int[] a={1,2,3,4,5,8,11};
int[] twoSum = TwoClassz.getTwoSum(a, 10);
for (int i : twoSum) {
System.out.println(i);
}
}
public static int[] getTwoSum(int[] a ,int target){
int i=0;
int j=a.length-1;
while(i<j){
if(a[i]+a[j]>target) {
--j;
}else if(a[i]+a[j]<target){
++i;
}else {
return new int[]{i,j};
}
}
return new int[]{-1,-1};
}
}
作者:pxj
2021-03-08
仅献给远方的你,愿你安好!
这篇博客介绍了两种方法找到数组中和为目标值的两个数。第一种方法使用双重循环,时间复杂度较高;第二种方法利用哈希映射,提高了查找效率。此外,还提供了一个有序数组中求和的高效解决方案,通过双指针法在有序数组中寻找目标和。
783

被折叠的 条评论
为什么被折叠?



