
算法
文章平均质量分 53
有关算法
灬爱码士灬
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
左神算法笔记(异或)+C语言实现
初学C语言,用算法熟悉原创 2022-10-15 20:15:30 · 830 阅读 · 2 评论 -
LeetCode每日一题(26)——高度检查器
学校打算为全体学生拍一张年度纪念照。根据要求,学生需要按照 非递减 的高度顺序排成一行。排序后的高度情况用整数数组 expected 表示,其中 expected[i] 是预计排在这一行中第 i 位的学生的高度(下标从 0 开始)。给你一个整数数组 heights ,表示 当前学生站位 的高度情况。heights[i] 是这一行中第 i 位学生的高度(下标从 0 开始)。返回满足 heights[i] != expected[i] 的 下标数量 。排序(使用sort.Ints()),然后依次比较...原创 2022-06-13 12:04:19 · 294 阅读 · 0 评论 -
LeetCode每日一题(25)——最少移动次数使数组元素相等 II
最少移动次数使数组元素相等 II1.题目2.示例3.思路4.代码1.题目给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。2.示例示例 1:输入:nums = [1,2,3]输出:2解释: 只需要两步操作(每步操作指南使一个元素加 1 或减 1): [1,2,3] => [2,2,3] => [2,2,2]示例 2:输入:nums = [1,10,2,9]输出原创 2022-05-19 13:58:47 · 603 阅读 · 1 评论 -
LeetCode每日一题(24)——后继者
后继者1.题目2.示例3.思路4.代码1.题目设计一个算法,找出二叉搜索树中指定节点的“下一个”节点(也即中序后继)。如果指定节点没有对应的“下一个”节点,则返回null。2.示例示例 1:输入: root = [2,1,3], p = 1 2 / \ 1 3输出: 2示例 2:输入: root = [5,3,6,2,4,null,null,1], p = 6 5 / \ 3 6 / \ 2 4 /原创 2022-05-16 18:11:48 · 339 阅读 · 0 评论 -
LeetCode每日一题(23)——最大三角形面积
最大三角形面积1.题目2.示例3.思路4.代码暴力穷举凸包1.题目给定包含多个点的集合,从其中取三个点组成三角形,返回能组成的最大三角形的面积。2.示例输入: points = [[0,0],[0,1],[1,0],[0,2],[2,0]]输出: 2解释: 这五个点如下图所示。组成的橙色三角形是最大的,面积为2。注意: 3 <= points.length <= 50. 不存在重复的点。 -50 <= points[i][j] <= 50.原创 2022-05-15 17:51:53 · 313 阅读 · 0 评论 -
LeetCode每日一题(22)——一次编辑
一次编辑1.题目2.示例3.思路4.代码1.题目字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。2.示例示例 1:输入: first = “pale” second = “ple”输出: True示例 2:输入: first = “pales” second = “pal”输出: False3.思路for循环依次对比,每次遇到相同的位置上字符不同,就进行处理,如果两字符串长度原创 2022-05-13 17:21:31 · 326 阅读 · 0 评论 -
LeetCode每日一题(21)——删列造序
增减字符串匹配1.题目2.示例3.思路4.代码1.题目给你由 n 个小写字母字符串组成的数组 strs,其中每个字符串长度相等。这些字符串可以每个一行,排成一个网格。例如,strs = [“abc”, “bce”, “cae”] 可以排列为:abcbcecae你需要找出并删除 不是按字典序升序排列的 列。在上面的例子(下标从 0 开始)中,列 0(‘a’, ‘b’, ‘c’)和列 2(‘c’, ‘e’, ‘e’)都是按升序排列的,而列 1(‘b’, ‘c’, ‘a’)不是,所以要删除列 1 。原创 2022-05-12 14:42:24 · 365 阅读 · 0 评论 -
LeetCode每日一题(20)——增减字符串匹配
增减字符串匹配1.题目2.示例3.思路4.算法1.题目由范围 [0,n] 内所有整数组成的 n + 1 个整数的排列序列可以表示为长度为 n 的字符串 s ,其中:如果 perm[i] < perm[i + 1] ,那么 s[i] == ‘I’如果 perm[i] > perm[i + 1] ,那么 s[i] == ‘D’给定一个字符串 s ,重构排列 perm 并返回它。如果有多个有效排列perm,则返回其中 任何一个 。2.示例示例 1:输入:s = “IDID”输出:[原创 2022-05-09 15:54:01 · 166 阅读 · 0 评论 -
LeetCode每日一题(19)——数组中重复的数据
数组中重复的数据1.题目2.示例3.思路4.代码1.题目给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数,并以数组形式返回。你必须设计并实现一个时间复杂度为 O(n) 且仅使用常量额外空间的算法解决此问题。2.示例示例1:输入:nums = [4,3,2,7,8,2,3,1]输出:[2,3]示例 2:输入:nums = [1,1,2]输出:[1]示例 3:输入:原创 2022-05-08 11:21:13 · 449 阅读 · 0 评论 -
LeetCode每日一题(18)——最近的请求次数
最近的请求次数1.题目2.示例3.思路4.代码1.题目写一个 RecentCounter 类来计算特定时间范围内最近的请求。请你实现 RecentCounter 类:RecentCounter() 初始化计数器,请求数为 0 。int ping(int t) 在时间 t 添加一个新请求,其中 t 表示以毫秒为单位的某个时间,并返回过去 3000 毫秒内发生的所有请求数(包括新请求)。确切地说,返回在 [t-3000, t] 内发生的请求数。保证 每次对 ping 的调用都使用比之前更大的 t 值原创 2022-05-06 20:49:00 · 181 阅读 · 0 评论 -
LeetCode每日一题(17)—— 乘积小于 K 的子数组(双指针)
乘积小于 K 的子数组1.题目2.示例3.思路4.代码1.题目给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目。2.示例示例 1:输入:nums = [10,5,2,6], k = 100输出:8解释:8 个乘积小于 100的子数组分别为:[10]、[5]、[2]、[6]、[10,5]、[5,2]、[2,6]、[5,2,6]。 需要注意的是 [10,5,2]并不是乘积小于 100 的子数组。示例 2:输入:nums = [1原创 2022-05-05 11:26:49 · 176 阅读 · 0 评论 -
LeetCode每日一题(16)——重新排列日志文件(sort.SliceStable)
重新排列日志文件1.题目2.示例3.思路4.代码1.题目给你一个日志数组 logs。每条日志都是以空格分隔的字串,其第一个字为字母与数字混合的 标识符 。有两种不同类型的日志:字母日志:除标识符之外,所有字均由小写字母组成数字日志:除标识符之外,所有字均由数字组成请按下述规则将日志重新排序:所有 字母日志 都排在 数字日志 之前。字母日志 在内容不同时,忽略标识符后,按内容字母顺序排序;在内容相同时,按标识符排序。数字日志 应该保留原来的相对顺序。返回日志的最终顺序。2.示例示例原创 2022-05-03 19:42:14 · 1581 阅读 · 0 评论 -
LeetCode每日一题(15)——两棵二叉搜索树中的所有元素
两棵二叉搜索树中的所有元素1.题目2.示例3.思路4.代码1.题目给你 root1 和 root2 这两棵二叉搜索树。请你返回一个列表,其中包含 两棵树 中的所有整数并按 升序 排序。.2.示例示例 1:输入:root1 = [2,1,4], root2 = [1,0,3]输出:[0,1,1,2,3,4]示例 2:输入:root1 = [1,null,8], root2 = [8,1]输出:[1,1,8,8]提示:每棵树的节点数在 [0, 5000] 范围内-105 &原创 2022-05-01 10:36:06 · 151 阅读 · 0 评论 -
LeetCode每日一题(14)——最小差值 I
最小差值I1.题目2.示例3.思路4.代码1.题目给你一个整数数组 nums,和一个整数 k 。在一个操作中,您可以选择 0 <= i < nums.length 的任何索引 i 。将 nums[i] 改为 nums[i] + x ,其中 x 是一个范围为 [-k, k] 的整数。对于每个索引 i ,最多 只能 应用 一次 此操作。nums 的 分数 是 nums 中最大和最小元素的差值。在对 nums 中的每个索引最多应用一次上述操作后,返回 nums 的最低 分数 。2.示例原创 2022-04-30 17:41:11 · 654 阅读 · 0 评论 -
LeetCode每日一题(13)——建立四叉树(递归)
建立四叉树1.题目2.示例3.思路1.题目给你一个 n * n 矩阵 grid ,矩阵由若干 0 和 1 组成。请你用四叉树表示该矩阵 grid 。你需要返回能表示矩阵的 四叉树 的根结点。注意,当 isLeaf 为 False 时,你可以把 True 或者 False 赋值给节点,两种值都会被判题机制 接受 。四叉树数据结构中,每个内部节点只有四个子节点。此外,每个节点都有两个属性:val:储存叶子结点所代表的区域的值。1 对应 True,0 对应 False;isLeaf: 当这个节点是一原创 2022-04-29 19:57:12 · 3234 阅读 · 0 评论 -
LeetCode每日一题(12)——按奇偶排序数组(双指针)
按奇偶排序数组1.题目2.示例3.思路代码1.题目给你一个整数数组 nums,将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。返回满足此条件的 任一数组 作为答案。2.示例示例 1:输入:nums = [3,1,2,4]输出:[2,4,3,1]解释:[4,2,3,1]、[2,4,1,3] 和 [4,2,1,3]也会被视作正确答案。示例 2:输入:nums = [0]输出:[0]提示:1 <= nums.length <= 50000 &l原创 2022-04-28 10:13:12 · 394 阅读 · 2 评论 -
LeetCode每日一题(11)——太平洋大西洋水流问题(递归,深度优先遍历实例)
有助于理解递归算法和深度优先遍历原创 2022-04-27 17:15:53 · 478 阅读 · 0 评论 -
LeetCode每日一题(10)——三维形体投影面积(保姆级)
三维形体投影面积1.题目2.示例3.思路理解题目解题思路4.代码1.题目在 n x n 的网格 grid 中,我们放置了一些与 x,y,z 三轴对齐的 1 x 1 x 1 立方体。每个值 v = grid[i][j] 表示 v 个正方体叠放在单元格 (i, j) 上。现在,我们查看这些立方体在 xy 、yz 和 zx 平面上的投影。投影 就像影子,将 三维 形体映射到一个 二维 平面上。从顶部、前面和侧面看立方体时,我们会看到“影子”。返回 所有三个投影的总面积 。2.示例示例 1:输原创 2022-04-26 20:06:11 · 441 阅读 · 0 评论 -
LeetCode每日一题(9)——随机数索引(理解水塘抽样)
随机数索引1.题目2.示例3.思路及代码1.题目给定一个可能含有重复元素的整数数组,要求随机输出给定的数字的索引。 您可以假设给定的数字一定存在于数组中。注意:数组大小可能非常大。 使用太多额外空间的解决方案将不会通过测试。2.示例int[] nums = new int[] {1,2,3,3,3}; Solution solution = newSolution(nums);// pick(3) 应该返回索引 2,3 或者 4。每个索引的返回概率应该相等。solution.pick(3原创 2022-04-25 22:45:05 · 201 阅读 · 0 评论 -
LeetCode每日一题(8)——二进制间距
二进制间剧1.题目2.示例3.思路4.代码5.复杂度分析1.题目给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0 。如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,“1001” 中的两个 1 的距离为 3 。2.示例示例 1:输入:n = 22输出:2解释:22 的二进制是 “10110” 。在 22 的二进制表示中,有原创 2022-04-24 09:44:51 · 247 阅读 · 0 评论 -
LeetCode每日一题(7)——旋转函数
旋转函数1.题目2.示例3.思路4.代码5.复杂度分析1.题目给定一个长度为 n 的整数数组 nums 。假设 arrk 是数组 nums 顺时针旋转 k 个位置后的数组,我们定义 nums 的 旋转函数 F 为:F(k) = 0 * arrk[0] + 1 * arrk[1] + ... + (n - 1) * arrk[n - 1]返回 F(0), F(1), …, F(n-1)中的最大值 。生成的测试用例让答案符合 32 位 整数。2.示例示例 1:输入: nums = [4,3原创 2022-04-22 23:18:44 · 1259 阅读 · 0 评论 -
LeetCode每日一题(6)——山羊拉丁文
山羊拉丁文1.题目2.示例3.思路4.代码5.复杂度分析1.题目给你一个由若干单词组成的句子 sentence ,单词间由空格分隔。每个单词仅由大写和小写英文字母组成。请你将句子转换为 “山羊拉丁文(Goat Latin)”(一种类似于 猪拉丁文 - Pig Latin 的虚构语言)。山羊拉丁文的规则如下:如果单词以元音开头(‘a’, ‘e’, ‘i’, ‘o’, ‘u’),在单词后添加"ma"。例如,单词 “apple” 变为 “applema” 。如果单词以辅音字母开头(即,非元音字母),移原创 2022-04-21 17:41:46 · 618 阅读 · 0 评论 -
LeetCode每日一题(5)——文件的最长绝对路径
文件的最长绝对路径1.题目2.示例3.思路4.代码5.复杂度分析1.题目假设有一个同时存储文件和目录的文件系统。下图展示了文件系统的一个示例:这里将 dir 作为根目录中的唯一目录。dir 包含两个子目录 subdir1 和 subdir2 。subdir1 包含文件 file1.ext 和子目录 subsubdir1;subdir2 包含子目录 subsubdir2,该子目录下包含文件 file2.ext 。在文本格式中,如下所示(⟶表示制表符):dir⟶ subdir1⟶ ⟶ fi原创 2022-04-20 23:27:03 · 133 阅读 · 0 评论 -
LeetCode每日一题(4)——字符的最短距离
LeetCode每日一题(4)字符的最短距离1.题目2.示例3.思路代码1.题目给你一个字符串 s 和一个字符 c ,且 c 是 s 中出现过的字符。返回一个整数数组 answer ,其中 answer.length == s.length 且 answer[i] 是 s 中从下标 i 到离它 最近 的字符 c 的 距离 。两个下标 i 和 j 之间的 距离 为 abs(i - j) ,其中 abs 是绝对值函数。2.示例示例 1:输入:s = “loveleetcode”, c = “e”原创 2022-04-19 22:40:03 · 279 阅读 · 0 评论 -
LeetCode每日一题(3)——字典序排数
LeetCode每日一题(3)字典序排数1.题目2.示例3.思路4.代码1.题目给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。2.示例示例 1:输入:n = 13输出:[1,10,11,12,13,2,3,4,5,6,7,8,9]示例 2:输入:n = 2输出:[1,2]3.思路我是没啥思路的,看了一个别人的题解,特别好理解,真正着手去做又发现在进位或者临界时的思路又不清晰了。感觉只有按原创 2022-04-18 19:37:16 · 436 阅读 · 0 评论 -
LeetCode每日一题(2)——最常见的单词
LeetCode每日一题(2)最常见的单词1.题目2.示例3.思路4.代码(官方)5.最后1.题目给定一个段落 (paragraph) 和一个禁用单词列表 (banned)。返回出现次数最多,同时不在禁用列表中的单词。题目保证至少有一个词不在禁用列表中,而且答案唯一。禁用列表中的单词用小写字母表示,不含标点符号。段落中的单词不区分大小写。答案都是小写字母。2.示例输入:paragraph = “Bob hit a ball, the hit BALL flew far after it wa原创 2022-04-17 18:33:30 · 102 阅读 · 0 评论 -
LeetCode每日一题(1)——最大回文数乘积
go语言练的力扣算法题,有关回文数生成原创 2022-04-16 20:20:18 · 680 阅读 · 0 评论 -
反转单链表
反转链表1、题目2、思路3、代码4、递归方式代码1、题目定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL2、思路遍历链表,并在访问各节点时修改 next 引用指向复杂度分析:时间复杂度 O(N) : 遍历链表使用线性大小时间。空间复杂度 O(1) : 变量 pre 和 cur 使用常数大小额外空间。原创 2022-02-27 11:44:46 · 291 阅读 · 0 评论 -
从尾到头打印链表
包含min函数的栈1、题目2、思路3、代码1、题目输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例:输入:head = [1,3,2]输出:[2,3,1]2、思路从尾到头的顺序和栈的先进后出很相似。可以创建一个栈,在依次读取链表时,进行入栈。根据栈的长度创建输出的数组,并在出栈过程中依次赋值。复杂性分析时间复杂度:O(n)。正向遍历一遍链表,然后从栈弹出全部节点,等于又反向遍历一遍链表。空间复杂度:O(n)。额外使用一个栈存储链表中的每个节点。3、代原创 2022-02-26 11:51:14 · 573 阅读 · 0 评论 -
包含min函数的栈
包含min函数的栈1、题目2、思路3、代码1、题目定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min(); --> 返回 -3.minStack.pop();minStack.原创 2022-02-25 23:17:21 · 179 阅读 · 0 评论 -
算法练习——(10)小明的作业详解与分析(栈,数组,遍历,逻辑练习)
题目分析小明同学正在学习一种新的语言。在该语言中,如果出现了一次wa或者一次aw,则代表出现了一个警告。如果出现了连续的wa或者连续的aw,则代表出现了一个错误。小明由于学习比较粗心,所以他想要知道自己刚刚写完的作业中一共出现了多少处警告和错误。下面是小明刚刚写完的作业,请你帮助小明找到他一共出现了多少次警告和多少次错误。分析题目:仔细读题,明确要求的是两个量,一个是警告,一个是错误。大致思路:1.定义两个变量分别为警告次数和错误次数2.遍历作业经判断确定是警告次数增加还是错误次数增加动手解原创 2021-04-17 16:06:01 · 293 阅读 · 0 评论 -
算法练习——(9)汉诺塔问题
一.起源:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。https://blog.csdn.net/qq_19446965/article/details/81591945二.抽象为数学问题:有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱原创 2021-04-11 09:15:57 · 599 阅读 · 0 评论 -
算法练习——(8)用下标排序
问题:给你n个无序的int整型数组arr,并且这些整数的取值范围都在0-20之间,要你在 O(n) 的时间复杂度中把这 n 个数按照从小到大的顺序打印出来。public void f(int arr[]) { int[] temp = new int[21]; for (int i = 0; i < arr.length; i++) { temp[arr[i]]++; } //顺序打印 for (int i原创 2021-10-23 19:11:18 · 220 阅读 · 0 评论 -
算法练习——(7)位运算
1.最简单地位运算使用场景就是在进行除法和乘法运算的时候了,例如每次遇到 n / 2,n / 4,n / 8这些运算的时候,完全可以使用位运算,可以代码运行效率更高,例如n / 2 等价于 n >> 1n / 4 等价于 n >> 2n / 8 等价于 n >> 3。如果测试下 n / 2 和 n >> 1 的运行效率,可能会发现没啥差别,但其实并非没有差别,而是大部分编译器会自动把 n / 2 优化成 n >> 1,这可以让你的代码显的更原创 2021-10-23 19:07:00 · 279 阅读 · 0 评论 -
算法练习——(6)斐波那契数列前20个
中国朋友们聚会时喜欢玩"逢7过"的游戏,老外有个同样的游戏,FlipFlop,它从1计数到100,顺序输出。当遇到3的倍数就要说“Flip”,遇到5的倍数就要说“Flop”,既为3的倍数又为5的倍数则要说“FlipFlop”,说错的话表演节目或罚酒。public class text1{ public static void main(String[] aregs) { for (int a=1;a<=100;a++) { if(a%3==0&&a%5==0)原创 2021-10-23 18:51:00 · 298 阅读 · 0 评论 -
算法练习——(5)输出图形
输出矩形、空心矩形、等腰三角形、菱形public class text01{ public static void main(String[] args) { System.out.println("输出实心矩形"); int s=8; String a[][] = new String[s][s]; for(int i=0;i<s;i++) { for (int j=0;j<s;j++) { a[i][j] =" *"; System.out.原创 2021-10-23 18:48:35 · 273 阅读 · 0 评论 -
算法练习——(4)统计特定字符数量
4.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。import java.util.Scanner;public class text4 {public static void main(String [] args) { Scanner sc=new Scanner(System.in); System.out.println("请输入字符串:"); String str=sc.nextLine(); int a=0,b=0,c=0,d=0; for (int i =原创 2021-10-23 18:47:46 · 131 阅读 · 0 评论 -
算法练习——(3)合并数组
3.有两个已经排好序的数组,A:{9,28,38,40,56,65,78,82} B:{13,21,33,38,45},请定义一个新数组,将这两个数组中的数据合并到新数组中并且保证数据仍然是有序的。package first;public class paixu { public static void main(String[] args) { int [] a= {9,28,38,40,56,65,78,82}; int [] b={13,21,33,38,45}; int []原创 2021-10-23 18:46:29 · 178 阅读 · 0 评论 -
算法练习——(2)逢7过
1.中国朋友们聚会时喜欢玩"逢7过"的游戏,老外有个同样的游戏,FlipFlop,它从1计数到100,顺序输出。当遇到3的倍数就要说“Flip”,遇到5的倍数就要说“Flop”,既为3的倍数又为5的倍数则要说“FlipFlop”,说错的话表演节目或罚酒。public class text1{ public static void main(String[] aregs) { for (int a=1;a<=100;a++) { if(a%3==0&&a%5==0)原创 2021-10-23 18:45:32 · 2121 阅读 · 0 评论 -
算法练习——(1)找数组中唯一成对的那个数(异或)
异或 ——如何找数组中唯一成对的那个数(数组特殊)1-1000这一千个数放在含有1001个元素的数组中,只有唯一的一个元素值重复,其他均只出现一次。 每个数组元素只能访问一次,设计一个算法,将他找出来;不用辅助储存空间,设计一个算法实现.package LanQiao;import java.util.Random;/** * @Author: Mo * @Date: 2021/1原创 2021-01-19 00:19:21 · 206 阅读 · 1 评论