
ALGORITHM
ALGORITHM
Winn~
这个作者很懒,什么都没留下…
展开
-
什么是Java的快排算法?
1、什么是快排算法快速排序的原理:选择一个关键值作为基准值。比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的)。一般选择序列的第一个元素作为基准值。2、快排算法的实现逻辑一次循环:从后往前比较,用基准值和最后一个值比较,如果比基准值小的交换位置,如果没有继续比较下一个,直到找到第一个比基准值小的值才交换。找到这个值之后,又从前往后开始比较,如果有比基准值...原创 2018-04-28 17:38:18 · 565 阅读 · 0 评论 -
什么是字典序算法?
1.从后向前查看逆序区域,找到逆序区域的前一位,也就是数字置换的边界2.把逆序区域的前一位和逆序区域中刚刚大于它的数字交换位置3.把原来的逆序区域转为顺序。原创 2018-04-11 10:12:48 · 3129 阅读 · 0 评论 -
找出一堆数中最小的前K个数
于是想到了,用堆来实现,但是自己实现又太麻烦,想到了Java里面的TreeSet,先将K个数放入TreeSet中,由于TreeSet会对里面的元素进行排序,所以在TreeSet中的元素是有序的,以后每插入一个元素,将TreeSet中的最大元素删除即可,所以TreeSet动态维持K个元素且这K个元素是有序的。但是,本题要求的只是求出最小的k个数即可,用排序可以但显然有点浪费,比如让求10000个整数数组中的最小的10个数,用排序的话平均时间复杂度差为Nlog(N)。原创 2025-04-28 14:40:15 · 160 阅读 · 0 评论 -
230. 二叉搜索树中第 K 小的元素
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。示例 1:输入:root = [3,1,4,null,2], k = 1输出:1。原创 2024-04-15 11:34:50 · 369 阅读 · 0 评论 -
98. 验证二叉搜索树
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入:root = [2,1,3]输出:true。原创 2024-04-15 11:25:05 · 319 阅读 · 1 评论 -
108. 将有序数组转换为二叉搜索树
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵平衡二叉搜索树。示例 1:输入:nums = [-10,-3,0,5,9]输出:[0,-3,9,-10,null,5]原创 2024-04-15 10:32:37 · 285 阅读 · 0 评论 -
102. 二叉树的层序遍历
给你二叉树的根节点 root ,返回其节点值的 层序遍历。(即逐层地,从左到右访问所有节点)。示例 1:输入:root = [3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]原创 2024-04-15 10:21:12 · 685 阅读 · 1 评论 -
543. 二叉树的直径
给你一棵二叉树的根节点,返回该树的 直径。二叉树的 直径 是指树中任意两个节点之间最长路径的 长度。这条路径可能经过也可能不经过根节点 root。两节点之间路径的 长度 由它们之间边数表示。示例 1:输入:root = [1,2,3,4,5]输出:3解释:3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。原创 2024-04-15 10:07:33 · 443 阅读 · 0 评论 -
101. 对称二叉树
给你一个二叉树的根节点 root , 检查它是否轴对称。示例 1:输入:root = [1,2,2,3,4,4,3]输出:true。原创 2024-04-10 12:11:42 · 475 阅读 · 0 评论 -
226. 翻转二叉树
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]原创 2024-04-10 11:36:24 · 365 阅读 · 0 评论 -
104. 二叉树的最大深度
给定一个二叉树 root ,返回其最大深度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。示例 1:输入:root = [3,9,20,null,null,15,7]输出:3。原创 2024-04-10 11:24:55 · 309 阅读 · 0 评论 -
94. 二叉树的中序遍历
给定一个二叉树的根节点 root ,返回 它的 中序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,3,2]原创 2024-04-10 11:16:47 · 345 阅读 · 0 评论 -
23. 合并 K 个升序链表
给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:1->4->5,1->3->4,2->6将它们合并到一个有序链表中得到。原创 2024-04-09 18:21:08 · 324 阅读 · 0 评论 -
148. 排序链表
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表。示例 1:输入:head = [4,2,1,3]输出:[1,2,3,4]原创 2024-04-09 18:02:23 · 289 阅读 · 0 评论 -
25. K 个一组翻转链表
给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。示例 1:输入:head = [1,2,3,4,5], k = 2输出:[2,1,4,3,5]原创 2024-04-09 12:28:32 · 309 阅读 · 0 评论 -
19. 删除链表的倒数第 N 个结点
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]原创 2024-04-09 10:53:57 · 300 阅读 · 0 评论 -
2. 两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.原创 2024-04-09 10:32:19 · 248 阅读 · 0 评论 -
21. 合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]原创 2024-04-09 10:02:06 · 313 阅读 · 0 评论 -
142. 环形链表 II
给定一个链表的头节点 head ,返回链表开始入环的第一个节点。如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改 链表。示例 1:输入:head = [3,2,0,-4], pos = 1。原创 2024-04-08 11:35:26 · 750 阅读 · 0 评论 -
141. 环形链表
给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回 true。否则,返回 false。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。原创 2024-04-08 11:21:32 · 278 阅读 · 0 评论 -
234. 回文链表
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true;否则,返回 false。示例 1:输入:head = [1,2,2,1]输出:true。原创 2024-04-08 11:11:50 · 433 阅读 · 0 评论 -
206. 反转链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例 1:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]原创 2024-04-08 10:24:37 · 329 阅读 · 0 评论 -
240. 搜索二维矩阵 II
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例 1:输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5输出:true。原创 2024-04-08 09:53:14 · 554 阅读 · 0 评论 -
48. 旋转图像
给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3]]原创 2024-04-07 18:24:50 · 427 阅读 · 0 评论 -
41. 缺失的第一个正数
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。示例 1:输入:nums = [1,2,0]输出:3解释:范围 [1,2] 中的数字都在数组中。示例 2:输入:nums = [3,4,-1,1]输出:2解释:1 在数组中,但 2 没有。原创 2024-04-07 15:52:32 · 537 阅读 · 0 评论 -
238. 除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。请 不要使用除法,且在 O(n) 时间复杂度内完成此题。示例 1:输入: nums = [1,2,3,4]输出: [24,12,8,6]原创 2024-04-07 12:08:47 · 628 阅读 · 0 评论 -
189. 轮转数组
给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。示例 1:输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3 步: [5,6,7,1,2,3,4]原创 2024-04-07 12:00:43 · 572 阅读 · 0 评论 -
53. 最大子数组和
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6。原创 2024-04-07 11:11:52 · 322 阅读 · 0 评论 -
239. 滑动窗口最大值
给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 滑动窗口中的最大值。示例 1:输入:nums = [1,3,-1,-3,5,3,6,7], k = 3输出:[3,3,5,5,6,7]解释:滑动窗口的位置 最大值。原创 2024-04-06 17:31:30 · 305 阅读 · 0 评论 -
438. 找到字符串中所有字母异位词
给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。示例 1:输入: s = “cbaebabacd”, p = “abc”输出: [0,6]解释:起始索引等于 0 的子串是 “cba”, 它是 “abc” 的异位词。起始索引等于 6 的子串是 “bac”, 它是 “abc” 的异位词。原创 2024-04-04 21:46:44 · 256 阅读 · 0 评论 -
3. 无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度。示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。原创 2024-04-04 21:07:04 · 287 阅读 · 0 评论 -
42. 接雨水
给定 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 个单位的雨水(蓝色部分表示雨水)。原创 2024-04-04 20:23:08 · 733 阅读 · 0 评论 -
11. 盛最多水的容器
给定一个长度为 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。原创 2024-04-04 12:16:25 · 391 阅读 · 0 评论 -
283. 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。示例 1:输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0]原创 2024-04-04 12:01:12 · 265 阅读 · 0 评论 -
826. 安排工作以达到最大收益
你有 n 个工作和 m 个工人。给定三个数组: difficulty, profit 和 worker ,其中:difficulty[i] 表示第 i 个工作的难度,profit[i] 表示第 i 个工作的收益。worker[i] 是第 i 个工人的能力,即该工人只能完成难度小于等于 worker[i] 的工作。每个工人 最多 只能安排 一个 工作,但是一个工作可以 完成多次。举个例子,如果 3 个工人都尝试完成一份报酬为 $1 的同样工作,那么总收益为 $3。原创 2024-04-03 17:24:33 · 245 阅读 · 0 评论 -
673. 最长递增子序列的个数
给定一个未排序的整数数组 nums , 返回最长递增子序列的个数。注意 这个数列必须是 严格 递增的。示例 1:输入: [1,3,5,4,7]输出: 2解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。原创 2024-04-03 16:11:00 · 350 阅读 · 0 评论 -
300. 最长递增子序列
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4。原创 2024-04-03 14:07:42 · 253 阅读 · 0 评论 -
795. 区间子数组个数
给你一个整数数组 nums 和两个整数:left 及 right。找出 nums 中连续、非空且其中最大元素在范围 [left, right] 内的子数组,并返回满足条件的子数组的个数。生成的测试用例保证结果符合 32-bit 整数范围。示例 1:输入:nums = [2,1,4,3], left = 2, right = 3输出:3解释:满足条件的三个子数组:[2], [2, 1], [3]原创 2024-04-03 09:56:42 · 394 阅读 · 0 评论 -
862. 和至少为 K 的最短子数组
给你一个整数数组 nums 和一个整数 k ,找出 nums 中和至少为 k 的 最短非空子数组 ,并返回该子数组的长度。如果不存在这样的 子数组 ,返回 -1。子数组 是数组中 连续 的一部分。示例 1:输入:nums = [1], k = 1输出:1。原创 2024-04-02 17:38:52 · 293 阅读 · 0 评论 -
560. 和为 K 的子数组
给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数。子数组是数组中元素的连续非空序列。示例 1:输入:nums = [1,1,1], k = 2输出:2。原创 2024-04-02 15:46:00 · 382 阅读 · 0 评论