LeetCode42-接雨水
题目给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 示例 2: 输入:height = [4,2,0,3,2,5] 输出:9 提示: n == height.length 1 <= n <= 2 * 104 0 <= height[i] <= 105 分析题目要求我们计算一个由非负整数数组表示的高度图能接多少雨水。我们可以把数组的每个元素想象成一个宽度为 1 的柱子。 要计算能接多少雨水,关键在于找出每个位置上方能够蓄水的高度。对于数组中的任意一个位置 i,其上方能蓄水的高度取决于它左边的最高柱子和右边的最高柱子中较矮的那个。 我们用 max_left[i] 表示位置 i 左边(包括 i)的最高柱子高度,用 max_right[i] 表示位置 i...
LeetCode15-三数之和
题目给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 1: 输入:nums = [-1,0,1,2,-1,-4] 输出:[[-1,-1,2],[-1,0,1]] 解释: 123nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。 不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。 注意,输出的顺序和三元组的顺序并不重要。 示例 2: 输入:nums = [0,1,1] 输出:[] 解释:唯一可能的三元组和不为 0 。 示例...
LeetCode11-盛最多水的容器
题目给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。 说明:你不能倾斜容器。 示例 1: 输入:[1,8,6,2,5,4,8,3,7] 输出:49 解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。 示例 2: 输入:height = [1,1] 输出:1 提示 n == height.length 2 <= n <= 105 0 <= height[i] <= 104 分析1. 理解问题题目的目标是,在给定的代表垂直线高度的数组 height 中,找出两条线,使其与 x 轴共同构成的容器能容纳的水量最大。 容器的容量由两个因素决定: 宽度 (width):两条线在 x 轴上的距离,即它们索引的差 j - i。 高度...
LeetCode283-移动零
题目给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums = [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums = [0] 输出: [0] 提示: 1 <= nums.length <= 104 -231 <= nums[i] <= 231 - 1 进阶:你能尽量减少完成的操作次数吗? 分析问题描述给定一个数组 nums,你需要编写一个函数,将数组中的所有 0 元素移动到数组的末尾。这个过程必须满足两个条件: 非零元素的相对顺序必须保持不变。 必须在原数组上直接进行修改(原地操作),不能创建新的数组副本。 解题思路分析这道题的核心在于如何在移动 0 的同时,不打乱其他非零元素的原始顺序。一个直观但错误的想法是遍历数组,每当遇到一个 0,就将它与数组末尾的元素交换。这种方法的问题在于,无法保证非零元素的相对顺序。例如,[0, 1, 0, 3, 12],如果将第一个 0 与...
LeetCode128-最长连续序列
题目给定一个未排序的整数数组 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 示例 3: 输入:nums = [1,0,1,2] 输出:3 提示: 0 <= nums.length <= 105 -109 <= nums[i] <= 109 分析1. 初步思考与暴力解法最直观的想法是,对于数组中的每一个数 x,我们都去尝试寻找 x+1, x+2, x+3, … 是否存在于数组中,直到找不到为止,以此来确定以 x 开头的连续序列的长度。然后我们遍历所有数字,找出最长的那个长度。 这个方法需要两层循环:外层循环遍历每个数字 x,内层循环则去数组中查找 x+1, x+2 等。在未排序的数组中查找一个元素的时间复杂度是...
LeetCode49-字母异位词分组
题目给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 示例 1: 输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"] 输出: [["bat"],["nat","tan"],["ate","eat","tea"]] 解释: 在 strs 中没有字符串可以通过重新排列来形成 “bat”。 字符串 “nat” 和 “tan” 是字母异位词,因为它们可以重新排列以形成彼此。 字符串 “ate” ,”eat” 和 “tea” 是字母异位词,因为它们可以重新排列以形成彼此。 示例 2: 输入: strs = [""] 输出: [[""]] 示例 3: 输入: strs = ["a"] 输出:...
LeetCode1-两数之和
题目给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。你可以按任意顺序返回答案。 示例 1: 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 示例 2: 输入:nums = [3,2,4], target = 6 输出:[1,2] 示例 3: 输入:nums = [3,3], target = 6 输出:[0,1] 提示: 2 <= nums.length <= 104 -109 <= nums[i] <= 109 -109 <= target <= 109 只会存在一个有效答案 分析这道题的目标非常明确:在一个整数数组中,找到两个数,使它们的和等于一个给定的目标值...
为 code-server 配置 HTTPS 安全访问指南
为什么需要 HTTPS?默认情况下,code-server 通过 HTTP 协议提供服务,所有传输数据(包括密码、代码文件等敏感信息)均以明文传输,存在被中间人攻击窃取的风险。HTTPS 通过 SSL/TLS 加密通信,可有效防止数据泄露和篡改,是生产环境必备的安全措施。 完整配置步骤1️⃣ 获取 SSL 证书推荐使用阿里云免费 SSL 证书(每年 20 个免费额度): 登录 阿里云 SSL 证书控制台 申请免费 DV 证书,完成域名验证 证书签发后,选择「下载」证书,类型选择 Apache 2️⃣ 准备证书文件下载的压缩包包含三个关键文件: 123your_domain.key # 私钥文件your_domain_public.crt # 公钥证书your_domain_chain.crt # 证书链 3️⃣ 创建证书目录在服务器上创建专用目录存放证书: 1mkdir -p...
负数之谜:从补码溢出看Java整数计算的陷阱
负数之谜:从补码溢出看Java整数计算的陷阱问题现象:意外的负值在Java开发中,我们有时会遇到一些反直觉的整数计算结果。观察以下代码片段: 12345678910public static void main(String[] args) { int i = 0; int j = Integer.MAX_VALUE - 1; // 2147483646 int m = (i + j) / 2; System.out.printf("m: %d%n", m); // 输出: m: 1073741823 i = m + 1; // i = 1073741824 m = (i + j) / 2; System.out.printf("m: %d%n", m); // 输出: m:...
深入计算机底层:彻底搞懂原码、反码和补码
引言:计算机如何理解正负?你是否曾好奇,由无数0和1构成的计算机,是如何精确地表示和计算我们日常生活中的数字,尤其是像-20这样的负数?这个问题的答案,隐藏在计算机科学最基础、也最重要的一个知识点中——编码。 为了让只能理解高低电平(即0和1)的电路能够处理带有“+”、“-”符号的整数,科学家们设计了一套精妙的编码体系。这其中,原码、反码和补码就是理解这套体系的三把关键钥匙。 本文将带你深入计算机的底层视角,不仅告诉你它们“是什么”,更会解释“为什么”需要它们,并手把手教你如何进行手动转换。读完本文,你将对计算机如何存储和运算数字有一个全新的、更为深刻的认识。 第一站:原码 (Sign-Magnitude) - 最直观的尝试原码是最符合人类直觉的一种表示法。它将一个二进制数分为两部分:符号位和数值位。 规则:在一个特定位数(例如8位)的二进制数中,最高位作为符号位(0代表正数,1代表负数),其余位则表示该数绝对值的二进制形式。 我们以8位系统为例: +7的原码 符号:正数,符号位为 0。 数值:7 的二进制是...