面试经典-反转链表II
反转链表II题目92. 反转链表 II 给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。 示例 1: 输入:head = [1,2,3,4,5], left = 2, right = 4输出:[1,4,3,2,5] 示例 2: 输入:head = [5], left = 1, right = 1输出:[5] 提示: 链表中节点数目为 n 1 <= n <= 500 -500 <= Node.val <= 500 1 <= left <= right <= n 进阶: 你可以使用一趟扫描完成反转吗? 题解题解一 转换为数组再进行处理 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152public class ReverseBetween ...
面试经典-随机链表的复制
随机链表的复制题目138. 随机链表的复制 完全读不懂题,但能看懂案例🤣🤣🤣 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。 例如,如果原链表中有 X 和 Y 两个节点,其中 X.random --> Y 。那么在复制链表中对应的两个节点 x 和 y ,同样有 x.random --> y 。 返回复制链表的头节点。 用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示: val:一个表示 Node.val 的整数。 random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,则为 null ...
面试经典-合并两个有序链表
合并两个有序链表题目21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4] 示例 2: 输入:l1 = [], l2 = []输出:[] 示例 3: 输入:l1 = [], l2 = [0]输出:[0] 提示: 两个链表的节点数目范围是 [0, 50] -100 <= Node.val <= 100 l1 和 l2 均按 非递减顺序 排列 题解 简单,自己做 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071public class MergeTwoLists { public static void main(String[] args) ...
docker-compose集群部署
docker-compose集群部署 所谓集群部署,就是将多个容器部署到多个节点上,实现容器的横向扩展。docker-compose集群部署,就是将多容器的网络打通,实现容器的横向扩展。此种方式不太常见,一般是通过Kubernetes来完成容器的横向扩,且Kubernetes能够做到容器的自动伸缩。更加方便日常的使用。
docker-compose单机部署
docker-compose单机部署一、安装docker-compose12345678# 从 https://github.com/docker/compose/releases/download/v2.18.1/docker-compose-$(uname -s)-$(uname -m) 下载资源保存到/usr/local/bin/docker-composecurl -L "https://github.com/docker/compose/releases/download/v2.18.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose# 赋予可执行权限chmod +x /usr/local/bin/docker-compose# 创建软链接ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose# 查看docker-compose 版本docker-compose version 二、d...
Docker网络
Docker网络Docker网络是Docker中的重中之重,只有明白了它,我们才能真正的明白docker的工作原理 前置条件:两个个运行着的容器 宿主机端口 32799 容器镜像端口 8080 容器IP 172.17.0.2 宿主机端口 49157 容器镜像端口 80 容器IP 172.17.0.3 容器网关 172.17.0.1 一、Docker请求如何是转发到指定的容器的 首先,在外部我们只能通过宿主机(也就是运行docker的服务器)来进行访问 下面以此为例,这是一个springboot项目 所以我们的请求肯定首先会通过宿主机的网卡,宿主机会监听端口 1netstat -tuln | grep 32799 然后宿主机在看到请求要请求到该端口,就会通过 iptables 这个文件查看该请求最终要请求的destination 1sudo iptables -t nat -L -n -v 最终我们会看到,我们在页面上访问的 http:/...
面试经典-两数相加
两数相加题目2. 两数相加 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例 1: 输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807. 示例 2: 输入:l1 = [0], l2 = [0]输出:[0] 示例 3: 输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]输出:[8,9,9,9,0,0,0,1] 提示: 每个链表中的节点数在范围 [1, 100] 内 0 <= Node.val <= 9 题目数据保证列表表示的数字不含前导零 题解 简单,注意点:超过10向前进一 12345678910111213141516171819202122232425262728293031323334353...
面试经典-环形链表
环形链表题目141. 环形链表 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。 如果链表中存在环 ,则返回 true 。 否则,返回 false 。 示例 1: 输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。 示例 2: 输入:head = [1,2], pos = 0输出:true解释:链表中有一个环,其尾部连接到第一个节点。 示例 3: 输入:head = [1], pos = -1输出:false解释:链表中没有环。 提示: 链表中节点的数目范围是 [0, 104] -105 <= Node.val <= 105 pos 为 -1 或者链表中的一个 有...
Dccoker安装
Dccoker安装一、首先配置阿里云yum源配置阿里云yum源 二、修改docker-ce.repo1cat /etc/yum.repos.d/docker-ce.repo 1cp /etc/yum.repos.d/docker-ce.repo /etc/yum.repos.d/docker-ce.repo.bak 如果没有该文件,新建一个 12cd /etc/yum.repos.d/vim docker-ce.repo 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162[docker-ce-stable]name=Docker CE Stable - $basearchbaseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stableenabled=1gpgcheck=1gpgkey=ht...
面试经典-基本计算器
基本计算器题目224. 基本计算器 给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。 示例 1: 输入:s = "1 + 1" 输出:2 示例 2: 输入:s = " 2-1 + 2 " 输出:3 示例 3: 输入:s = "(1+(4+5+2)-3)+(6+8)" 输出:23 提示: 1 <= s.length <= 3 * 105 s 由数字、'+'、'-'、'('、')'、和 ' ' 组成 s 表示一个有效的表达式 ‘+’ 不能用作一元运算(例如, “+1” 和 "+(2 + 3)" 无效) ‘-‘ 可以用作一元运算(即 “-1” 和 "-(2 + 3)" 是有效的) 输入中不存在两个连续的操作符 每个数字和运行的计算将适合于一个有符号的 32位 整数 题解 毫无意义毫无营...
面试经典-逆波兰表达式求值
逆波兰表达式求值150. 逆波兰表达式求值 题目 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意: 有效的算符为 '+'、'-'、'*' 和 '/' 。 每个操作数(运算对象)都可以是一个整数或者另一个表达式。 两个整数之间的除法总是 向零截断 。 表达式中不含除零运算。 输入是一个根据逆波兰表示法表示的算术表达式。 答案及所有中间计算结果可以用 32 位 整数表示。 示例 1: 输入:tokens = ["2","1","+","3","*"] 输出:9 解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9 示例 2: 输入:tokens = ["4","13","5","/","+"] 输出:6 解释...
面试经典-最小栈
最小栈题目155. 最小栈 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop() 删除堆栈顶部的元素。 int top() 获取堆栈顶部的元素。 int getMin() 获取堆栈中的最小元素。 示例 1: 输入:["MinStack","push","push","push","getMin","pop","top","getMin"][[],[-2],[0],[-3],[],[],[],[]] 输出:[null,null,null,null,-3,null,0,-2] 解释:MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minS...
视频样例
视频样例本地视频(function(){var player = new DPlayer({"container":document.getElementById("dplayer0"),"video":{"url":"/images/beauty.mp4"}});window.dplayers||(window.dplayers=[]);window.dplayers.push(player);})() (function(){var player = new DPlayer({"container":document.getElementById("dplayer1"),"video":{"url":"/images/download.mp4"}});window.dplayers||(window.dplayers=[]);window.dplayers.push(player);})() 视频托管平台分享链接(function(){var player = new DPlayer({"container":document.getElementById("dplaye...
面试经典-简化路径
简化路径题目71. 简化路径 给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为 更加简洁的规范路径。 在 Unix 风格的文件系统中规则如下: 一个点 '.' 表示当前目录本身。 此外,两个点 '..' 表示将目录切换到上一级(指向父目录)。 任意多个连续的斜杠(即,'//' 或 '///')都被视为单个斜杠 '/'。 任何其他格式的点(例如,'...' 或 '....')均被视为有效的文件/目录名称。 返回的 简化路径 必须遵循下述格式: 始终以斜杠 '/' 开头。 两个目录名之间必须只有一个斜杠 '/' 。 最后一个目录名(如果存在)不能 以 '/' 结尾。 此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 '.' 或 '..')。 返回简化后得到的 规范路径 。 示例...
面试经典-有效的括号
有效的括号题目20. 有效的括号 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。 示例 1: 输入:s = “()” 输出:true 示例 2: 输入:s = “()[]{}” 输出:true 示例 3: 输入:s = “(]” 输出:false 示例 4: 输入:s = “([])” 输出:true 提示: 1 <= s.length <= 104 s 仅由括号 '()[]{}' 组成 题解本体要注意一点,按照正确的顺序😭😭😭😭 12345678910111213141516public boolean isValid(String s) { ...
面试经典-合并区间
合并区间题目56. 合并区间 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例 1: 输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 示例 2: 输入:intervals = [[1,4],[4,5]]输出:[[1,5]]解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。 提示: 1 <= intervals.length <= 104 intervals[i].length == 2 0 <= starti <= endi <= 104 题解题解一(排序法)123456789101112131415public int[][] merge(int[][] interval...
面试经典-汇总区间
汇总区间题目228. 汇总区间 给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。 列表中的每个区间范围 [a,b] 应该按如下格式输出: "a->b" ,如果 a != b "a" ,如果 a == b 示例 1: 输入:nums = [0,1,2,4,5,7]输出:[“0->2”,”4->5”,”7”]解释:区间范围是: [0,2] –> “0->2” [4,5] –> “4->5” [7,7] –> “7” 示例 2: 输入:nums = [0,2,3,4,6,8,9]输出:[“0”,”2->4”,”6”,”8->9”]解释:区间范围是: [0,0] –...
面试经典-最长连续序列
最长连续序列题目128. 最长连续序列 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入:nums = [100,4,200,1,3,2]输出:4解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。 示例 2: 输入:nums = [0,3,7,2,5,8,4,6,0,1]输出:9 提示: 0 <= nums.length <= 105 -109 <= nums[i] <= 109 题解 排序后,滑动窗口解题,挺简单的 12345678910111213141516171819202122232425262728public static int longestConsecutive(int[] nums) { if (nums.length == 0) return 0; int max = 0; int temp = 1; A...
面试经典-存在重复元素II
存在重复元素II题目219. 存在重复元素 II 给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。 示例 1: 输入:nums = [1,2,3,1], k = 3输出:true 示例 2: 输入:nums = [1,0,1,1], k = 1输出:true 示例 3: 输入:nums = [1,2,3,1,2,3], k = 2输出:false 提示: 1 <= nums.length <= 105 -109 <= nums[i] <= 109 0 <= k <= 105 题解题解一(暴力法)123456789101112public static boolean containsNearbyDuplicate(int[] nums, int k) { for ...
面试经典-快乐数
快乐数题目202. 快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 如果这个过程 结果为 1,那么这个数就是快乐数。 如果 n 是 快乐数 就返回 true ;不是,则返回 false 。 示例 1: 输入:n = 19输出:true解释:12 + 92 = 8282 + 22 = 6862 + 82 = 10012 + 02 + 02 = 1 示例 2: 输入:n = 2输出:false 提示: 1 <= n <= 231 - 1 题解 挺简单一题,只要知道不是快乐数的机制就好了 一旦出现循环,接肯定不是快乐数 12345678910111213141516171819202122232425262728293031323334public static boolean isHappy(int n) { ...
