力扣_排序和搜索

合并两个有序数组

//设置一个长度为n+m的新数组用于存数组nums1和数组num2的值
//循环比较nums1和nums2中的值,将两者中小的存入在nums中,并且序号加1
//循环直到有个数组的序号已经等于数组长度,那么将还没到的数组剩下元素存入在nums中
class Solution {
    public void merge(int[] nums1int mint[] nums2int n) {
        //设置新数组
        int[] temp = new int[m + n];
        //用于标识数组nums1和nums2的下标和nums的下标
        int index = 0;
        int i = 0;
        int j = 0;
        while (i < m && j < n) {
            if (nums1[i] <= nums2[j])
                temp[index++] = nums1[i++];
            else
                temp[index++] = nums2[j++];
        }
        for (; i < m; ) {
            temp[index++] = nums1[i++];
        }
        for (; j < n; ) {
            temp[index++] = nums2[j++];
        }
        //再把数组temp中的值赋给nums1
        for (int k = 0; k < m + n; k++) {
            nums1[k] = temp[k];
        }
    }
}
 
 

第一个错误的版本

/* The isBadVersion API is defined in the parent class VersionControl.
      boolean isBadVersion(int version); */
//早第一个出错的版本,即找最左边的版本
//可以使用二分法,不断的往左方推移
public class Solution extends VersionControl {
    public int firstBadVersion(int n) {
        //设初始版本1就是错的
        int l = 1;
        int r = n;
        //二分法
        while(l < r){
            int mid = l+(r-l)/2;
            if(isBadVersion(mid)){
                r = mid;
            }else{
                l = mid+1;
            }
        }
        return l;
    }
}
posted @ 2022-03-07 15:31  Space-guan  阅读(25)  评论(0)    收藏  举报