面试经典-全排列
全排列一、题目46. 全排列 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示例 2: 输入:nums = [0,1]输出:[[0,1],[1,0]] 示例 3: 输入:nums = [1]输出:[[1]] 提示: 1 <= nums.length <= 6 -10 <= nums[i] <= 10 nums 中的所有整数 互不相同 二、题解
面试经典-完全二叉树的节点个数
完全二叉树的节点个数一、题目222. 完全二叉树的节点个数 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。 示例 1: 输入:root = [1,2,3,4,5,6]输出:6 示例 2: 输入:root = []输出:0 示例 3: 输入:root = [1]输出:1 提示: 树中节点的数目范围是[0, 5 * 104] 0 <= Node.val <= 5 * 104 题目数据保证输入的树是 完全二叉树 进阶:遍历树来统计节点是一种时间复杂度为 O(n) 的简单解决方案。你可以设计一个更快的算法吗? 题解题解一(递归)123456789101112131415161718192021222324252627282930313233/** * Definition for a binary tree node. * public ...
面试经典-x的平方根
x的平方根一、题目69. x 的平方根 给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。 注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。 示例 1: 输入:x = 4输出:2 示例 2: 输入:x = 8输出:2解释:8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。 提示: 0 <= x <= 231 - 1 二、题解题解一(直接使用库函数)123public static int mySqrt(int x) { return (int)Math.sqrt(x);} ! 题解二(二分法)1234567891011121314151617public static int mySqrt(int x) { if (x < 2) { return x; // 处理特殊情况 0 和 1 } int lef...
面试经典-阶乘后的零
阶乘后的零一、题目172. 阶乘后的零 给定一个整数 n ,返回 n! 结果中尾随零的数量。 提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1 示例 1: 输入:n = 3输出:0解释:3! = 6 ,不含尾随 0 示例 2: 输入:n = 5输出:1解释:5! = 120 ,有一个尾随 0 示例 3: 输入:n = 0输出:0 提示: 0 <= n <= 104 进阶:你可以设计并实现对数时间复杂度的算法来解决此问题吗? 二、题解题解一(BigInteger方式)好像Leetcode无法识别BigInteger,所以提交失败 1234567891011121314151617public static int trailingZeroes(int n) { BigInteger result = BigInteger.ONE; for (int i = 1; i <= n; i++) { BigInteger bigInteger = BigIn...
面试经典-加一
加一一、题目66. 加一 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 示例 1: 输入:digits = [1,2,3]输出:[1,2,4]解释:输入数组表示数字 123。 示例 2: 输入:digits = [4,3,2,1]输出:[4,3,2,2]解释:输入数组表示数字 4321。 示例 3: 输入:digits = [9]输出:[1,0]解释:输入数组表示数字 9。加 1 得到了 9 + 1 = 10。因此,结果应该是 [1,0]。 提示: 1 <= digits.length <= 100 0 <= digits[i] <= 9 二、题解注意9+1=10 就可以了 1234567891011121314151617181920212223class Solution { public static int[] plusOne(int[] digits) {...
Centos通过命令开放端口
Centos通过命令开放端口查看防火墙状态1firewall-cmd --state 开启防火墙如果上述步骤打印出来不为running,执行下述命令开启防火墙,否则不用执行 1systemctl start firewalld.service 开启端口12345# firewall-cmd --zone=public --add-port=<your port>/tcp --permanent# –zone=public:表示作用域为公共的;# –add-port=8080/tcp:添加tcp协议的端口8080;# –permanent:永久生效,如果没有此参数,则只能维持当前服务生命周期内,重新启动后失效;firewall-cmd --zone=public --add-port=8080/tcp --permanent 输入命令重新载入配置1firewall-cmd --reload 重启防火墙1systemctl restart firewalld.service 查看对应的端口是不是已经开启1firewall-cmd --zone=public --...
面试经典-回文数
回文数一、题目9. 回文数 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数(如果一个整数向前和向后读都相同,则它是一个 回文数。 例如,121 是回文数,而 123 不是。) 是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例如,121 是回文,而 123 不是。 示例 1: 输入:x = 121输出:true 示例 2: 输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3: 输入:x = 10输出:false解释:从右向左读, 为 01 。因此它不是一个回文数。 提示: -231 <= x <= 231 - 1 进阶:你能不将整数转为字符串来解决这个问题吗? 二、题解题解一(双指针)1234567891011121314151617181920class Solution { public static boolean isPalindrome(int x) { ...
面试经典-电话号码的字母组合
电话号码的字母组合一、题目17. 电话号码的字母组合 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"] 示例 2: 输入:digits = ""输出:[] 示例 3: 输入:digits = "2"输出:["a","b","c"] 提示: 0 <= digits.length <= 4 digits[i] 是范围 ['2', '9'] 的一个数字。 二、题解题解一...
通过Vmware虚拟机修改Linux网络
通过Vmware虚拟机修改Linux网络一、安装Centos系统 点击确定之后 鼠标点进去,按上下键,直到红框里面的字体变白,然后等待
Centos7配置阿里云yum源
Centos7配置阿里云yum源1sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 1sudo wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo 1sudo yum clean all 1sudo yum makecache 看到圈红框的就代表 阿里云yum源配置好了 1sudo yum install -y yum-utils
面试经典-对称二叉树
对称二叉树一、题目101. 对称二叉树 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root = [1,2,2,3,4,4,3]输出:true 示例 2: 输入:root = [1,2,2,null,3,null,3]输出:false 提示: 树中节点数目在范围 [1, 1000] 内 -100 <= Node.val <= 100 进阶:你可以运用递归和迭代两种方法解决这个问题吗? 二、题解题解一(翻转+判断)推荐面试经典-翻转二叉树 面试经典-相同的树 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode ri...
数据结构-二叉树
二叉树1234567891011121314151617181920212223public 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; } public static TreeNode createTree(){ TreeNode root = new TreeNode(1); root.left = new TreeNode(2); root.left.left ...
面试经典-翻转二叉树
翻转二叉树一、题目226. 翻转二叉树 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1] 示例 2: 输入:root = [2,1,3]输出:[2,3,1] 示例 3: 输入:root = []输出:[] 提示: 树中节点数目范围在 [0, 100] 内 -100 <= Node.val <= 100 二、题解题解一(广度优先)1234567891011121314151617181920public static TreeNode invertTreeFromBFS(TreeNode root) { if (root == null || (root.left == null && root.right == null)) { return root; } Queue<TreeNode> queue = new LinkedList&l...
面试经典-相同的树
相同的树一、题目100. 相同的树 给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例 1: 输入:p = [1,2,3], q = [1,2,3]输出:true 示例 2: 输入:p = [1,2], q = [1,null,2]输出:false 示例 3: 输入:p = [1,2,1], q = [1,1,2]输出:false 提示: 两棵树上的节点数目都在范围 [0, 100] 内 -104 <= Node.val <= 104 二、题解 思路: 相同的二叉树,也就是说,两节点,以及两节点的值,都要相同 如果两节点节点相同,即 同为null 捉着同不为 null 同时,值也要相同 ,此时才能说此节点相同 题解一(广度优先)12345678910111213141516171819202122232425262728// 广度优先public static boolean isSameTree(TreeNode p, TreeNod...
面试经典-二叉树最大深度
二叉树最大深度一、题目104. 二叉树的最大深度 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root = [3,9,20,null,null,15,7]输出:3 示例 2: 输入:root = [1,null,2]输出:2 提示: 树中节点的数量在 [0, 104] 区间内。 -100 <= Node.val <= 100 二、题解 深度优先遍历(Depth-First Search, DFS)是一种常用的树或图的遍历算法。它从根节点开始,沿着树的深度方向遍历节点,尽可能深入地访问每个分支,直到无法继续深入为止,然后回溯到上一个节点,继续访问其他未访问的分支 深度优先遍历(Depth-First Search, DFS)包括前序遍历、中序遍历和后序遍历: 前序遍历(根节点 -> 左子树 -> 右子树)的结果为: 1 -> 2 -> 4 -> 5 -> 3 -> 6 -> 7 中序遍...
Docker构建一个基础的SpringBoot项目镜像并启动
Docker构建一个基础的SpringBoot项目镜像并启动一、打包一个SpringBoot应用12# 本教程的程序包git pull https://github.com/Jacobshash/dockefiledeploy.git 通过 maven package 或者 maven install 打为 jar 包 二、编写Dockerfile文件 Dockerfile是构建docker镜像的必须文件 Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明 123456789101112# 必须 构建镜像的底层镜像,本质是jdk23的linux的镜像,为springboot应用提供基础运行环境,可以是远程docker仓库的地址,也可以是本地docker镜像FROM open-jdk23# 非必须 可多个键值对 镜像的一些描述信息LABEL authors="loltoulan"# 工作目录,就是下面copy命令的destination目录,也是通过 docker exec -it 进入容器之后的目录WORKDI...
面试经典-分割链表
分割链表题目86. 分隔链表 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 示例 1: 输入:head = [1,4,3,2,5,2], x = 3输出:[1,2,2,4,3,5] 示例 2: 输入:head = [2,1], x = 2输出:[1,2] 提示: 链表中节点的数目在范围 [0, 200] 内 -100 <= Node.val <= 100 -200 <= x <= 200 题解题解一(两次循环法)1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556public class LinkedListPartition { public static void main(String[] args) {// ...
面试经典-旋转链表
旋转链表题目61. 旋转链表 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。 示例 1: 输入:head = [1,2,3,4,5], k = 2输出:[4,5,1,2,3] 示例 2: 输入:head = [0,1,2], k = 4输出:[2,0,1] 提示: 链表中节点的数目在范围 [0, 500] 内 -100 <= Node.val <= 100 0 <= k <= 2 * 109 题解 此题有点难,适合二刷 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586public class RotateRight { public static void main(String[] args) { ...
面试经典-删除排序链表中的重复元素II
删除排序链表中的重复元素II题目82. 删除排序链表中的重复元素 II 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。 示例 1: 输入:head = [1,2,3,3,4,4,5]输出:[1,2,5] 示例 2: 输入:head = [1,1,1,2,3]输出:[2,3] 提示: 链表中节点数目在范围 [0, 300] 内 -100 <= Node.val <= 100 题目数据保证链表已经按升序 排列 题解 此题有点难,适合二刷 12345678910111213141516171819202122232425262728293031public class DeleteDuplicates { public static void main(String[] args) { ListNode node1 = new ListNode(1); node1.next = new ListNode(1); no...
面试经典-删除链表的倒数第N个节点
删除链表的倒数第N个节点题目19. 删除链表的倒数第 N 个结点 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5] 示例 2: 输入:head = [1], n = 1输出:[] 示例 3: 输入:head = [1,2], n = 1输出:[1] 提示: 链表中结点的数目为 sz 1 <= sz <= 30 0 <= Node.val <= 100 1 <= n <= sz 进阶:你能尝试使用一趟扫描实现吗? 题解 此题有点难,适合二刷 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263import java.util.ArrayList;import java.util.List;public class RemoveNthF...
