1.判断数组是否为单调数组
思路:一次循环,用两个布尔变量(inc,dec)标识单调增和单调减;如果出现nums[i] < nums[i+1],则必不为单调减,dec设为false;如果出现nums[i] > nums[i+1],则必不为单调增,inc设为false;
public boolean isMonotonic(int[] nums) {
// 递增
boolean inc = true;
// 递减
boolean dec = true;
for(int i =0; i < nums.length - 1;i++){
if(nums[i] > nums[i+1]){
inc = false;
}
if(nums[i] < nums[i+1]){
dec = false;
}
}
return inc || dec;
}
2.查找元素插入位置
二分查找
public int searchInsert(int[] nums, int target) {
int l = 0;
int r = nums.length - 1;
while(l <= r){
int mid = (l + r) >> 1;
if(nums[mid] < target) l = mid + 1;
else if(nums[mid] > target) r = mid - 1;
else return mid;
}
return r+1;
}
3.合并数组
结果数组中,越往后的数组的元素越大,所以用两个指针分别指向两个数组的末尾,比较大小,将更大的写入结果数组中。
public void merge(int[] nums1, int m, int[] nums2, int n) {
int i = m - 1;
int j = n - 1;
for(int k = m+n-1;k >= 0;k--){
// 或者j < 0,是指nums2已经全部加入了nums1
if(j < 0 || (i >= 0 &&nums1[i] > nums2[j])){
nums1[k] = nums1[i--];
}
else {
nums1[k] = nums2[j--];
}
}
}