
LeetCode
文章平均质量分 50
记录leetCode的刷题,一题一个方法类型
长臂人猿
进阶的猿猴
展开
-
快速掌握排序算法——快速排序(图解)
前言 八大排序算法中我们最常用的还是快排,其效率和代码实现难度上都符合使用情况。可是知道其原理,但是手撸代码很久没有实现后,总是会难免磕磕绊绊,故作此文快速回顾,引入图解页方便新学同学快速理解。代码与搭配食用更佳噢。 排序之插入排序(直接插入、折半插入、希尔排序) 堆排序(源码C) 简述 简单的说,快排本质上是一个个寻找数组中每个元素的正确位置的过程,这个过程中暂叫确定的元素叫标准位。首先寻找到标准位在目标排序中的正确位置——通过双指针Left和Right,以排序数组为区间,二者相向运动。具体为通过原创 2022-03-07 18:13:54 · 2696 阅读 · 1 评论 -
(LeetCode)回溯匹配路径.79. 单词搜索
思路:经典回溯全匹配路径,类似全排列。原创 2022-12-27 16:23:55 · 206 阅读 · 2 评论 -
(LeetCode)回溯和O(n)找规律方法: 78. 子集
也就是逐层列举(类似冒泡的遍历形式 多层 for i=j)。还有一种我们可以从用例看出规律,即每一次添加新的元素nums[i],所造成原有结果集增加的集合为:(集合i-1) + (集合i-1的每个数组加上新元素nums[i])。如: nums[i]=1 : {空集} , {空集,1} 即: [] , [1](又是一个JAVA面试题)有点动态规划的味道: dp[i] = dp[i-1] , dp[i-1]每个元素加nums[i]时间 0 ms 击败 100% 内存 41.7 MB 击败 30.31%原创 2022-12-27 16:21:49 · 210 阅读 · 0 评论 -
(LeetCode)哑巴节点的应用:24. 两两交换链表中的节点
两两遍历交换,注意哑巴节点面去头节点烦恼。建立哑巴节点面去考虑头节点问题。原创 2022-12-27 16:20:13 · 231 阅读 · 0 评论 -
或非和java的移位操作符
MECE 原则,提升逻辑思维水平 MECE 原则(Mutually Exclusive Collectively Exhaustive)的中文意思是“相互独立,完全穷尽”,简而言之,能够做到不重叠、不遗漏,兼顾排他性和完整性。 MECE 原则是麦肯锡提出的一种结构化思考方式,无论是报告撰写,提案演讲,业务分析,它是一种很好的思维方式。 LeetCode.剑指56:I public class _56_I数组中数字出现的次数 { public static void main(String原创 2022-01-24 19:26:03 · 706 阅读 · 0 评论 -
LeetCode_740_删除并获得点数:利用hash转换题型
原题 740. 删除并获得点数 给你一个整数数组 nums ,你可以对它进行一些操作。 每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。 开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。 示例 1: 输入:nums = [3,4,2] 输出:6 解释: 删除 4 获得 4 个点数,因此 3 也被删除。 之后,删除 2 获得 2 个点数。总共获得 6 个点数。 解题思原创 2021-08-19 15:55:42 · 384 阅读 · 0 评论 -
自定义比较器Comparator接口和Comparable接口及详解String.compareTo方法的使用
前言 Comparator是一个位于java.util包的接口(interface),一般由Collections.sort()方法和Arrays.sort()实现:使用主要实现它的compare方法: new Comparator<Object>() { @Override public int compare(Object o1, Object o2) { .... } } 其中如果数组为对象数组原创 2021-08-02 14:12:26 · 1619 阅读 · 1 评论 -
递归_汉诺塔问题_JAVA
思路 怎么做呢?我们将问题简化,把它们看作两个饼:最大的饼和组合饼。 这样即可 形式化定义 将现象我们转化为计算机可理解的数学公式: 第一次的分解可知: H(N)=H(N-1)+1+H(N-1) 这里我们将H(N)分成了两个盘子,一个最大的盘子和小盘的合并盘。 将合并盘继续分解可以有: H(N-1)=H(N-2)+1+H(N-2) 直到最终 H(2)=H(1)+1+H(1)=1+1+1=3 别忘了 H(1)=1,a1=1,所以 H(1)=a1,则有 汉诺塔的Java代码实现 public原创 2021-03-03 18:51:28 · 290 阅读 · 2 评论 -
堆结构_以有序来简化统计:每日温度_739
题目 每日温度 请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。 例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。 提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。 解题思路 核心就是建一个栈,原创 2021-02-20 16:35:27 · 271 阅读 · 0 评论 -
计算不限定大小的两个数相加
前言 int类型数据是有一定大小范围的,在32位机子下:[-2147483648, 2147483647]。如何进行超出范围的计算呢? 解题思路 将数字转换为String类型,再转换为char[]数组进行模拟人算:进位法。以leetcode第二题为例 值得注意的是,2->4->3,其实便于理解可以看作是 3 < 4 < 2: 3 < 4 < 2 4 < 6 < 4 —————————————————— 8 &...原创 2020-11-27 13:51:39 · 331 阅读 · 2 评论 -
hash数组法长度不固定:集合
/** * 核心在于:你可以任何顺序返回解决方案,ID 的顺序也不受限制。此外,题目给出的数据保证至少存在一种解决方案。 * * 首先象到hash数组法,但是不确定hash数组的固定长度,采用字典的方式:Map,其实ArrayList应该也可以 * **/ public class 用户分组 { public List<List<Integer>> groupThePeople(int[] groupSizes) { Map dict...原创 2020-11-27 10:39:28 · 375 阅读 · 1 评论 -
Hash数组法.有效的字母异位词.242
前言 题目 242. 有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 示例 1: 输入: s = "anagram", t = "nagaram" 输出: true 示例 2: 输入: s = "rat", t = "car" 输出: false 说明: 你可以假设字符串只包含小写字母。 解题思路 字母的数量是有限的,26个。可以建立一个26长度的数组,来存储每个字母的数量。如果每个字母数量一样则是异位词,以此判断它是否为字母异位词。默认原创 2020-11-26 15:54:45 · 171 阅读 · 0 评论 -
二分查找.基于有序数组的查找方法.704
前言 抛砖引玉,先来个简单的。 解题思路 low mid high。 (low <= high),没有=,会少比较最后一个mid 代码 class Solution { public int search(int[] nums, int target) { int low = 0; int high = nums.length - 1; int mid = 0; ...原创 2020-11-26 15:38:26 · 255 阅读 · 0 评论