算法面试 | 40天刷完LeetCode 精选 TOP 面试题(4/40)

个人主页:天海奈奈的博客
刷题专栏: 题库 - 力扣 (LeetCode) 全球极客挚爱的技术成长平台面试top
刷题网站:  力扣 让我们一起加油~

目录

 88. 合并两个有序数组

101. 对称二叉树

94. 二叉树的中序遍历

7. 整数反转


终于赶上了,今天正常更久能在期限内完成了

 88. 合并两个有序数组

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。

请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。

注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。

示例 1:

输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
解释:需要合并 [1,2,3] 和 [2,5,6] 。
合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。
示例 2:

输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]
解释:需要合并 [1] 和 [] 。
合并结果是 [1] 。
示例 3:

输入:nums1 = [0], m = 0, nums2 = [1], n = 1
输出:[1]
解释:需要合并的数组是 [] 和 [1] 。
合并结果是 [1] 。
注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。

我们要合并数组,第一反应是去遍历数组,又看了一下题,我们返回的是第一个数组,我再建一个数组去往里面插数据就不太方便了,我们直接从第一个数组的末位+1开始给数组一添加数组二中的数据,添加完了再调用函数进行排序就行。

代码实现

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

101. 对称二叉树

 看题我们就能明白它这个树的左叶节点与右叶节点是对应的。一遇到树就想到了递归,我们递归的约束条件就是 左root== 右root == null,不然我们就让去建一个p,一个q,p去左节点,q就去右节点,去判断是否相等。

代码实现

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public boolean isSymmetric(TreeNode root) {
        return check(root,root);
    }
      public boolean check(TreeNode p, TreeNode q) {
        if (p == null && q == null) {
            return true;
        }
        if (p == null || q == null) {
            return false;
        }
        return p.val == q.val && check(p.left, q.right) && check(p.right, q.left);
    }


}

94. 二叉树的中序遍历

给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。

示例 1:


输入:root = [1,null,2,3]
输出:[1,3,2]
示例 2:

输入:root = []
输出:[]
示例 3:

输入:root = [1]
输出:[1]

这个题没啥好说的,递归实现,太经典了建议背下来。

代码实现

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
    List<Integer> res = new ArrayList<>();
    inorder(root,res);
    return res;
    }
    public void inorder(TreeNode root,List<Integer> res){
        if(root == null){
            return ;
        }
        inorder(root.left,res);
        res.add(root.val);
        inorder(root.right,res);
    }
}

7. 整数反转

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。
 

示例 1:

输入:x = 123
输出:321
示例 2:

输入:x = -123
输出:-321
示例 3:

输入:x = 120
输出:21
示例 4:

输入:x = 0
输出:0

我们通过不断模运算来获得高位,不断除法去获得低位,得到新的高位和低位并进行相应的位数的运算即可 。

代码实现

class Solution {
    public int reverse(int x) {
  long n = 0;
        while(x != 0) {
            n = n*10 + x%10;
            x = x/10;
        }
        return (int)n==n? (int)n:0;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_57169969/article/details/126775000
今日推荐