我是靠谱客的博主 糊涂故事,这篇文章主要介绍排序数组中的两个数字之和(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)的全部内容,更多相关排序数组中内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部