- 博客(62)
- 收藏
- 关注
原创 【leetcode】向字符串添加空格
假设空格需要在 第 3,5,8的位置插入,每在前面插入一个空格都意味着后面一个空格要像后移一位。题不难,关键在于找到新字符串中空格所属位置即可。
2024-04-04 17:46:52
320
1
原创 【leetcode】零钱兑换
其中 coin j 表示系统提供的每一个零钱面值,获取所有的i - 零钱面值组成的最小零钱个数 + 1则表示当前数额可组成的最小零钱数。计算并返回可以凑成总金额所需的 最少的硬币个数。给你一个整数数组 coins ,表示不同面额的硬币;输入:coins = [1, 2, 5], amount = 11。输入:coins = [2], amount = 3。输入:coins = [1], amount = 0。解释:11 = 5 + 5 + 1。,coin为系统提供的零钱面值。
2024-04-04 15:08:03
262
原创 LeetCode之547. 朋友圈(并查集)
547. 朋友圈(并查集)题目分析(并查集)代码题目班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。给定一个 N * N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已知第 i 个和 j 个学生互为朋友关系,否则为不知道。你必须输出所有学生中的已知的朋友圈总数。示例 1:输入: [[1,1,0], [1,1,0],
2020-05-26 21:49:54
721
原创 LeetCode之84. 柱状图中最大的矩形(单调栈解法)
84. 柱状图中最大的矩形(单调栈解法)题目分析(单调栈解法)代码题目给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/largest-rectangle-in-histogram著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。分析(单调栈解法)单调栈概念参考https://zhuan
2020-05-26 21:31:41
399
原创 LeetCode之1155. 掷骰子的N种方法(附DP详细解析思考过程)
1155. 掷骰子的N种方法(DP)题目分析回溯法动态规划记录自己的思考DP解法代码一道动态规划题,虽然自己思考的方向有问题,但是还是值得记录一下,毕竟思考了。题目这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, …, f。我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和。如果需要掷出的总点数为 target,请你计算出有多少种不同的组合情况(所有的组合情况总共有 f^d 种),模 10^9 + 7 后返回。示例 1:输入:d = 1, f = 6, tar
2020-05-21 08:56:14
1459
1
原创 LeetCode之1129. 颜色交替的最短路径
1129. 颜色交替的最短路径题目分析(DFS)代码题目在一个有向图中,节点分别标记为 0, 1, …, n-1。这个图中的每条边不是红色就是蓝色,且存在自环或平行边。red_edges 中的每一个 [i, j] 对表示从节点 i 到节点 j 的红色有向边。类似地,blue_edges 中的每一个 [i, j] 对表示从节点 i 到节点 j 的蓝色有向边。返回长度为 n 的数组 answer,其中 answer[X] 是从节点 0 到节点 X 的最短路径的长度,且路径上红色边和蓝色边交替出现。如果不
2020-05-12 22:59:27
513
原创 LeetCode之113. 路径总和 II
113. 路径总和 II题目分析(DFS)代码题目给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1返回:
2020-05-12 22:34:54
208
原创 LeetCode之567. 字符串的排列
567. 字符串的排列题目分析回溯法滑动窗口代码题目给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串。示例1:输入: s1 = "ab" s2 = "eidbaooo"输出: True解释: s2 包含 s1 的排列之一 ("ba").示例2:输入: s1= "ab" s2 = "eidboaoo"输出: False注意:输入的字符串只包含小写字母两个字符串的长度都在 [1, 10,000] 之
2020-05-12 22:18:22
462
原创 LeetCode之210. 课程表 II
210. 课程表 II题目分析代码题目现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。示例 1:输入: 2, [[1,0]] 输出: [0,1]解释: 总共有 2 门课程。要学习课程 1,你需要先完成课程
2020-05-12 21:33:28
323
原创 LeetCode之1239. 串联字符串的最大长度(回溯法)
1239. 串联字符串的最大长度题目分析(回溯法)代码题目给定一个字符串数组 arr,字符串 s 是将 arr 某一子序列字符串连接所得的字符串,如果 s 中的每一个字符都只出现过一次,那么它就是一个可行解。请返回所有可行解 s 中最长长度。示例 1:输入:arr = ["un","iq","ue"]输出:4解释:所有可能的串联组合是 "","un","iq","ue","uniq" 和 "ique",最大长度为 4。示例 2:输入:arr = ["cha","r","act","ers
2020-05-10 10:46:15
436
原创 LeetCode之221. 最大正方形
题目在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximal-square著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。分析动态规划思想:将一个问题划分为N个子问题,逐个解析子问题,前一个子问题的输出作为下一个子问题
2020-05-10 10:17:22
645
原创 LeetCode之983. 最低票价
983. 最低票价题目分析(DP)代码题目在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出。每一项是一个从 1 到 365 的整数。火车票有三种不同的销售方式:一张为期一天的通行证售价为 costs[0] 美元;一张为期七天的通行证售价为 costs[1] 美元;一张为期三十天的通行证售价为 costs[2]...
2020-05-08 08:51:34
307
原创 LeetCode之45. 跳跃游戏 II
45. 跳跃游戏 II题目分析树的最短路径树的最短路径BFS(加速版)贪心算法(最终版)代码题目给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例:输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位...
2020-05-07 22:28:57
289
原创 LeetCode之572. 另一个树的子树
572. 另一个树的子树题目分析未看题解前看了题解后代码题目给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。示例 1:给定的树 s: 3 / \ 4 5 / \ 1 2给定的树 t: 4 / \ 1 2...
2020-05-07 21:42:25
164
原创 LeetCode之554.砖墙
554. 砖墙题目分析代码题目你的面前有一堵方形的、由多行砖块组成的砖墙。 这些砖块高度相同但是宽度不同。你现在要画一条自顶向下的、穿过最少砖块的垂线。砖墙由行的列表表示。 每一行都是一个代表从左至右每块砖的宽度的整数列表。如果你画的线只是从砖块的边缘经过,就不算穿过这块砖。你需要找出怎样画才能使这条线穿过的砖块数量最少,并且返回穿过的砖块数量。你不能沿着墙的两个垂直边缘之一画线,这样显...
2020-05-04 22:22:44
428
原创 LeetCode之289.生命游戏
289.生命游戏问题分析代码问题根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态:1 即为活细胞(live),或 0 即为死细胞(dead)。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律:如果活细胞周围八个位置...
2020-05-04 22:00:56
328
原创 LeetCode之121 买股票的最佳时机题解记录
121.买卖股票的最佳时机问题分析代码问题给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖...
2020-05-04 21:36:14
410
原创 LeetCode之数组的度常规解法
题目数组的度给定一个非空且只包含非负数的整数数组 nums, 数组的度的定义是指数组里任一元素出现频数的最大值。你的任务是找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度示例 1:输入: [1, 2, 2, 3, 1]输出: 2解释: 输入数组的度是2,因为元素1和2的出现频数最大,均为2.连续子数组里面拥有相同度的有如下所示:[1, 2, 2, 3, 1], [...
2020-04-27 17:33:32
270
原创 C++ 常用结构,常用容器,常用算法
工欲善其事,必先利其器永远待更新!!!C++常用结构std::stringfind 函数substring函数front, back函数常用容器常用算法std::reversestd::sort常用结构std::stringstring应该是最常用的结构了,使用起来也比较简单std::string s;s = "123456";find 函数find函数可以返回该字符串的子...
2020-04-22 20:24:31
297
原创 LeetCode之每日温度动态规划解法
每日温度题目解析代码题目其实说是动态规划,也不知道算不算,因为印象里动态规划比较难,这题相对比较容易就能解开。可以先看一下题根据每日 气温 列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你...
2020-04-19 22:25:24
343
原创 算法导论之暴力破解法与分治法解决最大子数组问题分析
算法导论_分治法_个人理解思想分治法的主要思想:分解,解决,合并,即将一个问题分解成多个子问题,分别求解每一个子问题,再将每一个子问题进行合并。分治法的时间复杂度为每个子问题的复杂度之和。个人理解分治法是解决问题的一种思路,不一定在所有问题中分治法就比暴力法的效率高。具体要视问题而定。最大子数组的和问题最大子数组和的问题,算是一道比较经典的算法问题。一个任意整数的数组,如何求解该数组的子...
2020-04-16 00:24:17
1036
原创 时间复杂度偏数学解析
时间复杂度偏数学解析我们常说的时间复杂度, 如O(n^2),O(n),O(1)等。为什么我们要用O而不是用ABCDEFG呢?首先引入一个符号:θ算法导论中给出这个符号的定义:θ(g(n)) = {f(n): 存在正常量c1,c2和n0, 使得对所有的n >= n0,有0 <= c1g(n) <= f(n) <= c1g(n)}啥意思呢?意思就是说f(n) ...
2020-04-11 21:21:08
270
原创 剑指Offer之翻转单词顺序列
题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?思路: 先将字符串...
2018-03-14 12:01:44
229
原创 剑指Offer之左旋转字符串
题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!思路: 此题可以使用另一个思路,将两个字符串相加,左移多少位,就从右边的第几位开始读起,直到...
2018-03-14 10:58:09
282
原创 剑指Offer之和为S的两个数字
题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。思路: 递增排序乘积最小的两个数是离得最远的两个数,设置两个标志位start和end,分别位于数组的头和尾两个位置。 两边往中间逼,直到array[start] + array[end] == sum时结束。import java.util.A...
2018-03-14 10:40:44
139
原创 剑指Offer之和为S的连续正数序列
题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!思路: 连续和的问题,可以只遍历到S的...
2018-03-14 10:17:29
121
原创 剑指Offer之第一个只会出现一次的字符
题目描述 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置思路: 利用Map,key存放字符,value存放出现次数,最后与字符串比较,第一个出现次数为1的字符输出位置。import java.util.*;public class Solution { public int FirstNotRepeati...
2018-03-12 11:18:51
159
原创 剑指Offer之丑数
题目描述 把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路: 丑数除了包含2,3和5这三个因子之外,不能够包含其他因子。 此题可以利用动态规划的算法去做; 我们知道第一个丑数是1 那么下一个丑数则应该是2,3,5这三个数中乘以前面所有的丑数的最小积。...
2018-03-12 10:27:56
163
原创 剑指Offer之把数组排成最小的数
题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路: 其实这就是一个排序的算法,将数排列成能组合成最小的数。我第一时间想的是按照位置排序,先排好第1个数的位置,再在这个基础上排好第二个数的位置…. 后来参考了一下答案,发现其实思路挺简单的。排序的算法...
2018-03-12 09:20:03
122
原创 剑指Offer之整数中1出现的次数
题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。思路: 本人比较愚笨,用的是最一般的方法。 从1开始遍历到n,每次都将int型转为String型,...
2018-03-11 22:26:16
111
原创 剑指Offer之连续子数组最大和
题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?(子向量的长...
2018-03-11 20:05:43
156
原创 关于数组,List,Set和Map之间的互相转换
1、数组<===>List核心方法: 数组转List:Arrays.asList(); List转数组:使用List的toArray();数组转List:array = new int[] {1,2,3,4,5};Integer[] iArray = new Integer[array.length]; //要想数组转化为List类,必须将int先转化为包...
2018-03-11 18:57:02
8984
原创 剑指Offer之最小的K个数
题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。思路: 好久之前做过这个题了,但是因为太久没做了,关于数组之间和List之间和Set之间的转换有点忘了,在这我就先不多说,一会在开一篇来复习一下。首先明确一下题意,在数组中找出最小的k个数字,其实挺好理解的,但是我们需要想的深一点。因为数组中的数字有可能是...
2018-03-11 17:31:29
120
原创 剑指Offer之数组出现次数超过一半的数字
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路: 若一个数在数组中出现的次数超过数组长度的一半,那么这个数一定在排序之后的数组的中间位置。此题的思路在于取得排序之后的数组的最中间的元素,遍历数组计算该元素出现的...
2018-03-11 10:15:56
162
原创 剑指Offer之复杂链表的复制
题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路: 此题的思路是先在原链表中复制完成,在分离链表,这样才可以复制random指针。(random指针可以为空)例如:A->B->C->...复...
2018-03-10 11:35:29
175
原创 剑指Offer之二叉树中和为某一值的路径
题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。思路: 利用递归的思想,将路径和存放所有路径的链表设为成员变量,按照前序遍历的方法遍历二叉树,当遍历到每个结点时,将整数减去该结点的值,并且将该结点加入到路径中。 判断符合路径的条件是左右子树为空且target为0,若符合条件则将路径加入到...
2018-03-10 10:53:02
125
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人