文章目录
文章放置于:https://github.com/zgkaii/CS-Notes-Kz,欢迎批评指正!
数组
1. 移动零
283. Move Zeroes (Easy)
For example, given nums = [0, 1, 0, 3, 12], after calling your function, nums should be [1, 3, 12, 0, 0].
public void moveZeroes(int[] nums) {
int idx = 0;
for (int num : nums) {
if (num != 0) {
nums[idx++] = num;
}
}
while (idx < nums.length) {
nums[idx++] = 0;
}
}
2. 最大连续 1 的个数
485. Max Consecutive Ones (Easy)
public int findMaxConsecutiveOnes(int[] nums) {
int cur = 0, max = 0;
for (int n : nums)
max = Math.max(max, cur = n == 0 ? 0 : cur + 1);
return max;
}
3. 加一
66. Plus One(Easy)
public int[] plusOne(int[] digits) {
for (int i = digits.length - 1; i >= 0; i--) {
if (digits[i] < 9) {
digits[i]++;
return digits;
}
digits[i] = 0;
}
digits = new int[digits.length + 1];
digits[0] = 1;
return digits;
}
4. 删除排序数组中的重复项
26. Remove Duplicates from Sorted Array(Easy)
/**
* 双指针法
* 数组有序,重复的元素一定会相邻。
*/
public int removeDuplicates(int[] nums) {
if (nums == null || nums.length == 0) return 0;
int p = 0, q = 1;
while (q < nums.length) {
if (nums[p] != nums[q]) {
nums[p + 1] = nums[q];
p++;
}
q++;
}
return p + 1;
}
5. 合并两个有序数组
88. Merge Sorted Array(Easy)
暴力解法:
public void merge(int[] nums1, int m, int[] nums2, int n) {
System.arraycopy(nums2, 0, nums1, m, n);
Arrays.sort(nums1);
}
双指针:
public void merge(int[] nums1, int m, int[] nums2, int n) {
int p1 = m - 1, p2 = n - 1, len = m + n - 1;
while (p1 >= 0 && p2 >= 0) {
// 设置指针 p1 和 p2 分别指向 nums1 和 nums2 的有数字尾部,从尾部值开始比较遍历
// 同时设置指针 len 指向 nums1 的最末尾,每次遍历比较值大小之后,则进行填充
nums1[len--] = nums1[p1] > nums2[p2] ? nums1[p1--] : nums2[p2--]