1.LeetCode 896. 单调数列
题目地址:LeetCode
/**
* 一次遍历
*
* @param nums
* @return
*/
public boolean isMonotonic(int[] nums) {
boolean inc = true, dec = true;
int n = nums.length;
for (int i = 0; i < n - 1; i++) {
if (nums[i] > nums[i + 1]) {
inc = false;
}
if (nums[i] < nums[i + 1]) {
dec = false;
}
}
return inc || dec;
}
2.LeetCode 35. 搜索插入位置
题目地址:LeetCode
解题思路:
/**
* 二分查找
*
* @param nums
* @param target
* @return
*/
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) {
return mid;
} else if (nums[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return left;
}
3.LeetCode 88. 合并两个有序数组
题目地址:LeetCode
/**
* 逆向双指针
*
* @param nums1
* @param m
* @param nums2
* @param n
*/
public void merge(int[] nums1, int m, int[] nums2, int n) {
int k = m + n;
for (int index = k - 1, nums1Index = m - 1, nums2Index = n - 1; index >= 0; index--) {
if (nums1Index < 0) {
//nums1已经取完,完全取nums2的值即可
nums1[index] = nums2[nums2Index--];
} else if (nums2Index < 0) {
//nums2已经取完,完全取nums1的值即可
break;
} else if (nums1[nums1Index] > nums2[nums2Index]) {
//nums1的元素值大于nums2,取nums1值
nums1[index] = nums1[nums1Index--];
} else {
//nums2的元素值大于nums1,取nums2值
nums1[index] = nums2[nums2Index--];
}
}
}