Leetcode刷題之路(31-40)

35.搜索插入位置

搜索插入位置題目鏈接

  • 方法一:因爲順序是從小到大,利用一個for循環找出第一個下標大於或者等於給定值,找不到就返回數組的長度
public int searchInsert(int[] nums, int target) {
        for(int i=0;i<nums.length;i++){
            if(nums[i]>=target){
                return i;
            }
        }
        return nums.length;
    }
  • 方法二:因爲順序是從小到大,所以可以用二分法,可能是因爲測試數據太小了,按理來說二分法效率比方法一高出不少…
public int searchInsert(int[] nums, int target) {
        int left = 0,right = nums.length - 1;
        while(left<=right){
            int mid = (left+right)/2;
            if(nums[mid]<target){
                left = mid+1;
            }else if(target<nums[mid]){
                right = mid-1;
            }else{
                return mid;
            }
        }
        return left;
    }

38.報數

報數題目鏈接

  • 就一個簡單的雙重for循環,比較簡單的一道題
private  StringBuilder [] stringBuilder;
    public String countAndSay(int n) {
        init(n);
        return stringBuilder[n-1].toString();
    }

    private void init(int n) {
        stringBuilder = new StringBuilder[n];
        stringBuilder[0] = new StringBuilder("1");
        for(int i=1;i<n;i++){
            stringBuilder[i]=new StringBuilder("");
            char num1 = stringBuilder[i-1].toString().charAt(0);
            int count = 0;
            for(int j=0;j<stringBuilder[i-1].length();j++){
                 char num2 = stringBuilder[i-1].toString().charAt(j);
                 if(num1==num2){
                     count++;
                 }
                 else{
                     stringBuilder[i].append(count).append(num1);
                     num1=num2;
                     count=1;
                 }
            }
            stringBuilder[i].append(count).append(num1);
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章