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
仅献给远方的你,愿你安好!