
算法学习
Yoke______
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
刷题之142. 环形链表 II
给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改 链表。来源:力扣(LeetCode)链接:https://leetcode-cn.com/p原创 2022-02-14 09:23:24 · 178 阅读 · 0 评论 -
刷题之455. 分发饼干 -----贪心初试
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。示例 1:输入: g = [1,2,3], s = [1,1]输出: 1解释:你有三个孩子和两块小饼干,3个孩子的胃口值分别.原创 2022-01-24 12:33:32 · 107 阅读 · 0 评论 -
刷题之剑指 Offer II 047. 二叉树剪枝
给定一个二叉树 根节点 root ,树的每个节点的值要么是 0,要么是 1。请剪除该二叉树中所有节点的值为 0 的子树。节点 node 的子树为 node 本身,以及所有 node 的后代。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/pOCWxh著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。通过分析,所要满足的条件,要剪掉的子枝包括的条件是:子树根节点值为0 左子树为空 / 左子树中所有节点值为0原创 2022-01-23 10:39:49 · 879 阅读 · 0 评论 -
刷题之 翻转二叉树
翻转一棵二叉树。示例:输入: 4 / \ 2 7/ \ / \1 3 6 9输出: 4 / \ 7 2/ \ / \9 6 3 1来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/invert-binary-tree著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。利用遍历找到每个父节点,然后将他的左右孩子交换位置...原创 2022-01-23 10:26:32 · 93 阅读 · 0 评论 -
刷题之64. 最小路径和
给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例 1:输入:grid = [[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径 1→3→1→1→1 的总和最小。起初拿到这道题 我的第一想法是深度遍历,寻找最小path,使用递归,结果实例无法通过,在数据量过大得情况下使用搜索并不是一个好方法。 关于这种,最短路径等一个点与另...原创 2022-01-17 16:42:06 · 122 阅读 · 0 评论 -
刷题 之 链表成环
给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。来源:力扣(LeetCode)链接:https://leetcode-cn.com原创 2022-01-16 21:01:21 · 158 阅读 · 0 评论 -
刷题之金银铜奖牌排序
奥运会开始了,想请你为各个国家和地区做奖牌排序,按照金牌>银牌>铜牌的格式进行排序输入第一行 告诉你共有n个国家接来下的n 行 每行三个数字 分别代表 金牌数量 银牌数量 铜牌数量 中间用空格隔开输出输出n行 每行三个数字 按照题意进行排序样例输入51 2 32 3 41 4 61 4 30 3 4样例输出2 3 41 4 61 4 31 2 30 3 4使用compartor的compare的方法进行二维数组的每一个元素数组的每个元素原创 2022-01-16 12:24:55 · 1090 阅读 · 0 评论 -
刷题之全排列
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例 1:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/permutations著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。题目说明不需要按顺序输出数组,所以不需要...原创 2022-01-14 15:50:44 · 163 阅读 · 0 评论 -
刷题之77. 组合
题目:给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。示例 1:输入:n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/combinations著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。由于自己能...原创 2022-01-14 15:02:18 · 372 阅读 · 0 评论 -
刷题之猜数字大小
猜数字游戏的规则如下:每轮游戏,我都会从1到n 随机选择一个数字。 请你猜选出的是哪个数字。如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了。你可以通过调用一个预先定义好的接口 int guess(int num) 来获取猜测结果,返回值一共有 3 种可能的情况(-1,1或 0):-1:我选出的数字比你猜的数字小 pick < num1:我选出的数字比你猜的数字大 pick > num0:我选出的数字和你猜的数字一样。恭喜!你猜对了!pick == nu...原创 2022-01-13 17:02:10 · 195 阅读 · 0 评论 -
刷题之反转链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。思路非常简单,使用三个指针分别指向操作节点的上一个,操作节点,操作节点下一个。遍历链表,(结点未被指向便会被自动回收,就是找不到了,所以要保证时刻每个结点都有指向,并且可以循环)。代码如下:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNo.原创 2022-01-13 16:52:26 · 141 阅读 · 0 评论 -
刷题之合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/merge-two-sorted-lists著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。最简单的思路,比较两个链表的头部,然后取小的放到新链表。组成一个新链.原创 2022-01-13 16:44:50 · 111 阅读 · 0 评论 -
刷题之腐烂的橘子
在给定的网格中,每个单元格可以有以下三个值之一:值0代表空单元格;值1代表新鲜橘子;值2代表腐烂的橘子。每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/rotting-oranges著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例 2:输...原创 2022-01-12 18:40:04 · 139 阅读 · 0 评论 -
刷题之01 矩阵
给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。两个相邻元素间的距离为 1 。示例 1:输入:mat = [[0,0,0],[0,1,0],[0,0,0]]输出:[[0,0,0],[0,1,0],[0,0,0]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/01-matrix 这道题我寻思半天也没什么思路,只有暴力遍...原创 2022-01-12 18:26:05 · 183 阅读 · 0 评论 -
刷题之填充每个节点的下一个右侧节点指针
给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node { int val; Node *left; Node *right; Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。来源:力扣(LeetCode)链接:https://leetcode-cn.com...原创 2022-01-11 16:59:54 · 117 阅读 · 0 评论 -
刷题之合并二叉树
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为NULL 的节点将直接作为新二叉树的节点。示例1:输入: Tree 1 Tree 2 1 2 ...原创 2022-01-11 16:16:57 · 90 阅读 · 0 评论 -
刷题之岛屿的最大面积
给你一个大小为 m x n 的二进制矩阵 grid 。岛屿是由一些相邻的1(代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设grid 的四个边缘都被 0(代表水)包围着。岛屿的面积是岛上值为 1 的单元格的数目。计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0输入:grid = [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1...原创 2022-01-10 18:59:12 · 390 阅读 · 0 评论 -
刷题之图像渲染
有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。给你一个坐标 (sr, sc) 表示图像渲染开始的像素值(行 ,列)和一个新的颜色值 newColor,让你重新上色这幅图像。为了完成上色工作,从初始坐标开始,记录初始坐标的上下左右四个方向上像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应四个方向上像素值与初始坐标相同的相连像素点,……,重复该过程。将所有有记录的像素点的颜色值改为新的颜色值。最后返回经过上色渲染原创 2022-01-10 18:15:47 · 117 阅读 · 0 评论 -
刷题之字符串的排列 以及双指针滑动窗口
刷题给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。换句话说,s1 的排列之一是 s2 的 子串 。示例 1:输入:s1 = "ab" s2 = "eidbaooo"输出:true解释:s2 包含 s1 的排列之一 ("ba").来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/permutation-in-string ...原创 2022-01-10 17:14:23 · 349 阅读 · 0 评论 -
刷题之无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters拿到题便向暴力破解。将字串按个生成,取到最大值。但是耗费太多时间和空间。 ...原创 2022-01-09 22:43:13 · 505 阅读 · 0 评论 -
刷题之 删除链表的倒数第 N 个结点
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list 受到上个题的启发,这个题依然用快慢指针。删除结点要找到要删除结点的上一个节点,也就是哑结点,快指针 先行,慢指针后行,快慢指针之间相差题...原创 2022-01-08 13:43:37 · 391 阅读 · 0 评论 -
刷题之链表的中间结点
给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next原创 2022-01-08 12:21:56 · 191 阅读 · 0 评论 -
刷题之反转字符串中的单词 III
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例:输入:"Let's take LeetCode contest"输出:"s'teL ekat edoCteeL tsetnoc"来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-words-in-a-string-iii首先附上自己的愚蠢办法,先把它化为字符数组,然后遍历寻找空格,并设置一个标记符,如果没有空格则全部翻转,.原创 2022-01-07 22:57:01 · 92 阅读 · 0 评论 -
刷题之反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。示例 1:输入:s = ["h","e","l","l","o"]输出:["o","l","l","e","h"]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-string这道题非常简单,只需要双指针翻转即可,写一个revers.原创 2022-01-07 22:31:10 · 308 阅读 · 0 评论 -
刷题之两数之和 II - 输入有序数组
给定一个已按照 非递减顺序排列的整数数组numbers ,请你从数组中找出两个数满足相加之和等于目标数target 。函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。示例 1:输入:numbers = [2,7,11,1...原创 2022-01-06 20:21:46 · 211 阅读 · 0 评论 -
刷题之移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/move-zeroes拿到这个题第一想法就是双指针,一边指向左边用来遍历,一边指向右边用来存放0.需要保持非零元素的相对顺序,则左边遇到0则用一个变量.原创 2022-01-06 19:31:37 · 89 阅读 · 0 评论 -
刷题之轮转数组
给你一个数组,将数组中的元素向右轮转 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]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/rotate-array ...原创 2022-01-05 15:40:52 · 418 阅读 · 0 评论 -
刷题之有序数组的平方
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。示例 1:输入:nums = [-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,100]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/squares-of-a-sorted-array拿到这题我首先想到的就是平方.原创 2022-01-05 14:44:38 · 260 阅读 · 0 评论 -
刷题之搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/search-insert-position有序数组并且要求时间复杂度,自然想到二分查找先查到是否有与目标相等的数,有则返回索引,使用二分法如下;class Solution { public int s.原创 2022-01-04 14:23:25 · 342 阅读 · 0 评论 -
刷题之第一个错误的版本
你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。来源:力扣(LeetCode)原创 2022-01-04 13:37:47 · 139 阅读 · 0 评论 -
刷题之二分查找
题目给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-search入门阶段自然会想到循环遍历获得对应的索引值,但是所耗费的时间内存都较大。根据题目,给定的是一个升序的(有序的)数组,故很容易便能想到二分查找。 这是普通的循环遍历cla...原创 2022-01-04 11:26:02 · 179 阅读 · 0 评论