单调数组问题
思路:就是设置两个初始布尔变量,分别表示单调递增和单调递减,递增就是第一个布尔false,递减就是第二个false,如果两个布尔变量同时为false,就是不单调
class Solution {
public boolean isMonotonic(int[] nums) {
boolean loop1 = true;
boolean loop2 = true;
for(int i = 0; i < nums.length - 1; i++){
if(nums[i] > nums[i+1]){
loop1 = false;
}
if(nums[i] < nums[i+1]){
loop2 = false;
}
}
if(!loop1 && !loop2){
return false;
}
return true;
}
}
单调数组中插入元素的位置
1.首先判断极端情况,插入元素最小或者最大,如果是极端情况就直接返回插入位置
2.若不是极端情况就使用二分查找
3.这里再提一下mid的取值,有些时候mid = (left + right)/2,有时候mid = (left + right + 1)/2,这取决于你的判断条件,根据判断条件代码(如果你的if else 中存在 left = mid),那么要加1,因为计算机的取整是向下取整,left可以卡死和right形成死循环
class Solution {
public int searchInsert(int[] nums, int target) {
if(target < nums[0]){
return 0;
}
if(target > nums[nums.length - 1]){
return nums.length;
}
int left = 0;
int right = nums.length - 1;
while(left < right){
int mid = (left + right)/2;
if(target > nums[mid]){
left = mid + 1;
}else{
right = mid;
}
}
return left;
}
}
数组合并问题
88. 合并两个有序数组 - 力扣(LeetCode)
解法
思路:
1.其实还是挺好理解的,就是怎么把nums2数组的值插入到nums1中
2. 写一个基本的数组操作方法,将一个数插入有序数组
3. 然后遍历nums2,把nums2中的每一个数值通过方法插入nums1中
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
for(int i = 0; i < nums2.length; i++){
insert(nums1,m,nums2[i]);
m++;
}
}
public int insert(int[] arr,int size,int target){
int index = size;
for(int i = 0; i < size; i++){
if(arr[i] > target){
index = i;
break;
}
}
for(int i = size; i > index; i--){
arr[i] = arr[i - 1];
}
arr[index] = target;
return index;
}
}