LeetCode-探索-初級算法-排序和搜索-2. 第一個錯誤的版本(個人做題記錄,不是習題講解)

LeetCode-探索-初級算法-排序和搜索-2. 第一個錯誤的版本(個人做題記錄,不是習題講解)

LeetCode探索-初級算法:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/

  1. 第一個錯誤的版本
  • 語言:java

  • 思路:二分查找,每次取中間和中間的右邊那個進行判斷。

  • 代碼(19ms,擊敗23.74%,丟人,哈哈):

    /* The isBadVersion API is defined in the parent class VersionControl.
          boolean isBadVersion(int version); */
    
    public class Solution extends VersionControl {
        public int firstBadVersion(int n) {
            if(n>1){
                int start = 1;
                int end = n; 
                int middle;
                boolean left = false;
                boolean right = false;
                while(start<=end){
                    middle = start + (end-start)/2;
                    left = isBadVersion(middle);
                    if(!left){
                        right = isBadVersion(middle+1);
                        if(right)
                            return middle+1;
                        else{
                            start = middle+1;
                        }
                    }
                    else{
                        end = middle - 1;
                    }
                }
            }
            return 1;
        }
    }
    
  • 參考代碼(11ms):其實思想都是二分查找,就是我的實現代碼太low了。

    public class Solution extends VersionControl {
        public int firstBadVersion(int n) {
    
            int l = 1, r = n;
            while (l < r) {
                int mid = (l + r) >>> 1;
                if (isBadVersion(mid)) {
                    r = mid;
                    // System.out.println("badVersion: " + mid);
                } else {
                    // System.out.println("goodVersion: " + mid);
                    l = mid + 1;
                }
    
                // System.out.println("l :" + l + " r:" + r);
            }
            return r;
        }
    }
    
  • 參考後重寫(12ms):主要是要清楚最後返回的是end,因爲end就是符合條件的那個

    /* The isBadVersion API is defined in the parent class VersionControl.
          boolean isBadVersion(int version); */
    
    public class Solution extends VersionControl {
        public int firstBadVersion(int n) {
            int start = 1;
            int end = n;
            int middle;
            while(start<end){
                middle = (start+end)>>>1;
                if(isBadVersion(middle)){
                    end = middle;
                }else{
                    start = middle + 1;
                }
            }
            return end;
        }
    }
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章