您的位置:首页 > 编程语言 > Java开发

每日算法(二十一)-java给定一个数组,求是否存在数组里的两个元素相加等于目标数并求出下标(三种方法)

2019-06-01 16:37 591 查看

标题每日算法(二十一)-java给定一个数组,求是否存在数组里的两个元素相加等于目标数并求出下标(三种方法)

第一种方法,直接双遍历,想等就输出

public static void twosum(int arr[], int target){
for(int i=0;i<arr.length-1;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[i]+arr[j]==target){
System.out.println(arr[i]+"+"+arr[j]+"="+target);
System.out.println("第一个下标为:"+i+"第二个下标为:"+j);
}else{
System.out.println("无");
}
}
}
}

第二种方法二分查找,先排序,然后依次比较

public static int returnnum(int arr[], int target){
Arrays.sort(arr);
int left=0;
int right=arr.length-1;
while(left!=right){
if(arr[left]+arr[right]<target){
left++;
}else{
right--;
}if(arr[left]+arr[right]==target){
System.out.println(arr[left]+"+"+arr[right]+"="+target);
System.out.println("第一个下标为:"+left+"第二个下标为:"+right);
}
}
return target;
}

第三种方法,hash,把输入依次放入,之后用目标数减去第一个数的结果在表里面去找有就输出

public static int[] hashsum(int arr[],int target){
int temp[]=new int[2];
HashMap<Integer, Integer> map=new HashMap<>();
for(int i=0;i<arr.length;i++){
map.put(arr[i],i);
}
for(int i=0;i<arr.length;i++){
int other=target-arr[i];
if(map.containsKey(other)){
temp[0]=i;
temp[1]=map.get(other);
break;
}
}
return temp;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐