我是靠谱客的博主 糊涂故事,最近开发中收集的这篇文章主要介绍排序数组中的两个数字之和(java),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

排序数组中的两个数字之和(java)

1.双指针法

public class FindTwo {
    public static void main(String args[]){
        //查找两数之和,数组按照升序排列,且一个数字不能重复使用两次
        //双指针法
        int [] data=new int[]{1,3,4,5,6,8,9,10,11,14,18};
        int targetdata=15;
        int [] ans=new int[2];
        ans=NumFind(data,targetdata);

        System.out.println("数字所在位置为:"+ ans[0] + ": "+ data[ans[0]]+"--------"+ ans[1]+": "+data[ans[1]]);
    }
    public static int[] NumFind(int [] num,int targetnum){
        int [] solu=new int[2];
        int i,j;
        i=0;
        j=num.length-1;
        while(i<j){
         if(num[i]+num[j]<targetnum){
             i++;
         }if(num[i]+num[j]>targetnum){
         j--;
         }
         if(num[i]+num[j]==targetnum){
             break;
            }
        }
        solu[0]=i;
        solu[1]=j;
     return solu;
    }
}
  1. 二分查找法
public class FindTwo2 {
    public static void main(String args[]){
        //查找两数之和,数组按照升序排列,且一个数字不能重复使用两次
        //二分查找法
        int [] data=new int[]{1,3,4,5,6,8,9,10,11,14,18};
        int targetdata=32;
        int [] ans=new int[2];
        ans=ErFenfa(data,targetdata);

        System.out.println("数字所在位置为:"+ ans[0] + ": "+ data[ans[0]]+"--------"+ ans[1]+": "+data[ans[1]]);
    }
    public static int[] ErFenfa(int [] num,int targetnum) {
        int [] ans= new int[2];
        int i,j,flagx;
        int low,high,mid;
        low=0;
        high=num.length-1;
        mid=(low+high)/2;
        for(i=0;i<num.length;i++) {
        flagx=0;
        low=0;
        high=num.length-1;
        mid=(low+high)/2;
            while (low<high && flagx==0){
                if(num[mid]<targetnum-num[i]){
                    low=mid+1;
                    mid=(low+high)/2;
                }if(num[mid]>targetnum-num[i]){
                    high=mid-1;
                    mid=(low+high)/2;
                }if(num[mid]==targetnum-num[i]){
                    flagx=1;
                    break;
                }
            }
            if(flagx==1){
                break;
            }
        }
        ans[0]=i;
        ans[1]=mid;
        return ans;
    }
}

最后

以上就是糊涂故事为你收集整理的排序数组中的两个数字之和(java)的全部内容,希望文章能够帮你解决排序数组中的两个数字之和(java)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部