【LeetCode】初級演算法:排序和搜尋

widiot1發表於2018-07-08

1. 合併兩個有序陣列

用時:5ms

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int i=0,j=0,temp1,temp2;
        while(j<n&&i<(m+j)){
            // 找到插入點
            if(nums1[i]<=nums2[j]){
                ++i;
                continue;
            }
            // 插入nums2的元素
            temp1=nums1[i];
            nums1[i++]=nums2[j++];
            // 將插入點後的元素右移
            for(int s=i;s<(m+j);++s){
                temp2=nums1[s];
                nums1[s]=temp1;
                temp1=temp2;
            }
        }
        while(j<n){
            nums1[i++]=nums2[j++];
        }
    }
}

2. 第一個錯誤的版本

用時:17ms

public class Solution extends VersionControl {
    public int firstBadVersion(int n) {
        int s=1,e=n,c=(n+1)/2;
        while(s!=e){
            if(isBadVersion(c)){
                e=c;
            }else{
                s=c+1;
            }
            // 兩個大int相加會導致溢位
            c=(int)(s/2.0+e/2.0);
        }
        return c;
    }
}

相關文章