zoukankan      html  css  js  c++  java
  • 二分查找

    //n表示A的大小,A是有序数组且不包含重复元素
    public int getPos(int[] A,int n,int val){
      if(n==0||A==null)
        return -1;

      int left=0;
      int right=n-1;
      int mid;

      while(right>=left){
        mid=left+(right-left)/2;
        if(A[mid]==val)
          return mid;
        if(A[mid]>val)
          right=mid-1;    //mid左一个,很重要,当不存在时,会导致循环条件不满足跳出循环
        if(A[mid]<val)
          left=mid+1;

      }



      return -1;
    }

    当数组中出现了相同数字时,返回该值第一次出现的位置 

    public static int getPos(int[] A,int n,int val){
      if(n==0||A==null)
        return -1;

      int left=0;
      int right=n-1;
      int mid;

      while(right>left){
        mid=(right+left)/2;

        if(A[mid]>val)
          right=mid-1;
        else if(A[mid]<val)
          left=mid+1;
      /*
      * 当mid的值和val相等时,因为要返回最先出现的那个,所以让right=mid,
      * 这样再判断,当mid前面的中间值还是相等的值(有序),right就会继续往前,
      * 移到前面相等的位置。当前面不相等,left就会往后移,
      * 一直移到与right重合,此时 就可以跳出循环
      */
        else
          right=mid;

      }

      if(A[left]==val) return left;
      return -1;
    }

    ps:听说可以发表情

  • 相关阅读:
    《张艺谋这个人》较真
    《智能》是真智能
    《解密小米之互联网下的商业奇迹》
    《三毛。。。。》烂漫
    《盛典―― 诺奖之行》
    常用iOS、Mac框架和库及常用中文开发博客
    《人脸识别与人体动作识别技术及应用》
    《程序员第二步从程序员到项目经理》
    《信息安全导论》
    [leetCode]141.环形链表
  • 原文地址:https://www.cnblogs.com/xiaolovewei/p/7846512.html
Copyright © 2011-2022 走看看