美文网首页
二分查找

二分查找

作者: mrjunwang | 来源:发表于2018-09-30 15:58 被阅读0次

一组排序数中,给定一个数,返回最接近且不大于这个数的位置.要求时间复杂度在O(logn)

    public int getIndex(int[] a,int data){
        int left=0;
        int right=a.length-1;
        while(left<=right){
            int mid=left+(right-left)/2;
            if(a[mid]== data){
                return mid;
            }
            else if(a[mid] <data){
                 left=mid+1;
            }
            else{
                right=mid-1;
            }
        }
        return left-1;
    }

给定一个整型数组和一个整数,要找出数组中的两个数字,使得这两个数字的和等于给定的和。

例如,输入数组numbers={1,2,3,4,5,6,7},给定和为9,则要找出2和7,3和6,4和5的位置
给一个无序数组int[] nums 和一个整数 target,在这个数组中找到两个数 ,使得这个两个数的和等于target,找到这个数组中所有的满足这样条件的数
无序数组,给出O(N)时间复杂度的算法

public List getAll(int[] a,int target){
        Map<Integer,Integer> map=new HashMap<>();
        List list=new ArrayList<>();
        for(int i=0;i<a.length;i++){
            if(map.containsKey(a[i])){
                //int[] arrIndex=new int[2];
                int index=map.get(a[i]);
                List tmplist=new ArrayList<>();
//              arrIndex[0]=index;
//              arrIndex[1]=i;
                tmplist.add(index);
                tmplist.add(i);
                list.add(tmplist);
                
            }
            else{
                map.put(target-a[i], i);
            }
        }
        return list;
    }

有序数组,o(logn)的算法

public List<List> getAllSortedArray(int[] a,int target){
        int left=0;
        int right=a.length-1;
        List list=new ArrayList<>();
        while(left<right){
            int sum=a[left]+a[right];
            if(sum==target){
                List tempList=new ArrayList();
                tempList.add(left);
                tempList.add(right);
                list.add(tempList);
                left=left+1;
                right=right-1;
                
            }
            else if(sum>target){
                right=right-1;;
            }
            else{
                left=left+1;
            }
            
        }
        return list;
    }

相关文章

网友评论

      本文标题:二分查找

      本文链接:https://www.haomeiwen.com/subject/qcuwoftx.html