两条LeetCode带你更加深入数组算法

211 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情

LeetCode 66

题目

image.png

思路分析

(1)本题我首先想到的是使用数组来存储接收变量,然后求出数组的长度,进而+1

(2)接着考虑到数组中是10进制的数字,所以919+19返回

代码实现

class Solution {
    public int[] plusOne(int[] digits) {
        int len = digits.length;
        for(int i = len - 1; i >= 0; i--) {
            if(digits[i] == 9) {
                digits[i] = 0;
            } else {
                digits[i] += 1;
                return digits;
            }
        }
        int[] res = new int[len + 1];
        res[0] = 1;
        return res;
    }
}

代码详解

(1)首先我们定义一个len变量用于表达数组的长度,使用for循环来对数组的长度进行遍历-1的原因是因为数组本身的length是从1开始计算的

(2)如果数组digits的第i位为9,则赋值为0;如果不为9,则进1位;两种情况下均要返回数组digits

(3)如果数组中全为9,则开辟一个新空间用于表达该数组res,首位赋值为1,后面数组因为只是进行了初始化,所以全部为0,最终返回该数组res

LeetCode 88

题目

image.png

思路分析

(1)遇到这种题目我们首先要想到对两个数组进行遍历,然后找出公共部分对其进行判断

(2)如果相同的部分进行赋值操作,不同的部分后缀添加即可

(3)最终使用sort排序对数组进行处理

代码实现

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        for (int i = 0; i != n; ++i) {
            nums1[m + i] = nums2[i];
        }
        Arrays.sort(nums1);
    }
}

代码详解

(1)首先我们进行一个for循环用于实现对n的判定,只要不相等,即自增(此处自增的含义即为数组内元素的比较)

(2)将数组num2[ ]里面的尾元素赋值给num1[ ]里面去

(3)使用sort排序对数组进行整理、排序