![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
任菜菜学编程
暂无
展开
-
Leetcode40. 组合总和 II-python
难度:中等给定一个数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。示例1:输入: candidates =[10,1,2,7,6,1,5], target =8...原创 2020-04-26 16:31:09 · 222 阅读 · 0 评论 -
Leetcode39. 组合总和-python
难度:中等给定一个无重复元素的数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的数字可以无限制重复被选取。说明:所有数字(包括target)都是正整数。解集不能包含重复的组合。示例1:输入: candidates = [2,3,6,7], target = 7,...原创 2020-04-26 16:15:35 · 278 阅读 · 0 评论 -
Leetcode36. 有效的数独-python
难度:中等判断一个9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用'.'表示。示例1:输入:[ ["5","3",".",...原创 2020-03-29 17:40:20 · 608 阅读 · 0 评论 -
Leetcode 34. 在排序数组中查找元素的第一个和最后一个位置-python
难度:中等给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是O(log n) 级别。如果数组中不存在目标值,返回[-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例2:输入: nums = [5,7,...原创 2020-03-29 16:28:10 · 618 阅读 · 0 评论 -
Leetcode33. 搜索旋转排序数组-python
难度:中等假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,1,2,4,5,6,7]可能变为[4,5,6,7,0,1,2])。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回-1。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是O(logn) 级别。示例 1:输入: nums = [4,5,6,...原创 2020-03-24 17:59:11 · 438 阅读 · 0 评论 -
Leetcode32. 最长有效括号-python
难度:困难给定一个只包含 '('和 ')'的字符串,找出最长的包含有效括号的子串的长度。示例1:输入: "(()"输出: 2解释: 最长有效括号子串为 "()"示例 2:输入: ")()())"输出: 4解释: 最长有效括号子串为 "()()"思路:这种题采取动态规划的思想来做,首先我自己并没有想出来...也不算没想出来的吧,想出来了一半,然后去网上看一...原创 2020-03-24 16:51:02 · 677 阅读 · 0 评论 -
Leetcode31. 下一个排列-python
难度:中等实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1思路:最简单的一种思路是把数字的排...原创 2020-03-23 15:55:08 · 310 阅读 · 0 评论 -
Leetcode30. 串联所有单词的子串-python
难度:困难给定一个字符串s和一些长度相同的单词words。找出 s 中恰好可以由words 中所有单词串联形成的子串的起始位置。注意子串要与words 中的单词完全匹配,中间不能有其他字符,但不需要考虑words中单词串联的顺序。示例 1:输入: s = "barfoothefoobarman", words = ["foo","bar"]输出:[0,9]...原创 2020-03-23 14:22:43 · 420 阅读 · 0 评论 -
Leetcode29. 两数相除-python
难度:中等给定两个整数,被除数dividend和除数divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数dividend除以除数divisor得到的商。整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2示例1:输入: divide...原创 2020-03-23 13:27:39 · 517 阅读 · 0 评论 -
Leetcode25. K 个一组翻转链表-python
难度:困难给你一个链表,每k个节点一组进行翻转,请你返回翻转后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当k= 2 时,应当返回:2->1->4->3->5当k= 3 时,应当返回:...原创 2020-03-20 11:33:15 · 283 阅读 · 0 评论 -
Leetcode24. 两两交换链表中的节点-python
难度:中等给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.思路:我这个编写链表题...最喜欢的就是先转成数组,然后操作数组后再转回链表...数组的两两交换应该没问题吧~代码如下:# ...原创 2020-03-20 10:43:17 · 185 阅读 · 0 评论 -
Leetcode23. 合并K个排序链表-python
难度:困难合并k个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6思路:我也没啥好思路...也算是暴力破解,首先遍历一次所有元素,然后放到数组里排序,然后再重新生成...原创 2020-03-17 16:13:31 · 185 阅读 · 0 评论 -
Leetcode22. 括号生成-python
难度:中等给出n代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出n = 3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]思路:采取暴击添加或者动态规划解决,正好前几天学了动态规划,就在这个地方利用一下,动态规划的思想就是发现一个规律可以让f...原创 2020-03-17 15:32:13 · 317 阅读 · 0 评论 -
Leetcode19. 删除链表的倒数第N个节点-python
难度:中等给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n保证是有效的。进阶:你能尝试使用一趟扫描实现吗?思路:最简单的一种方法就是,遍历两次,第一次计算链...原创 2020-03-17 14:24:53 · 233 阅读 · 0 评论 -
Leetcode18. 四数之和-python
难度:中等给定一个包含n 个整数的数组nums和一个目标值target,判断nums中是否存在四个元素 a,b,c和 d,使得a + b + c + d的值与target相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要...原创 2020-03-16 16:43:20 · 183 阅读 · 0 评论 -
Leetcode17. 电话号码的字母组合-python
难度:中等给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。思路:创建好字...原创 2020-03-16 16:05:19 · 193 阅读 · 0 评论 -
Leetcode16. 最接近的三数之和-python
难度:中等给定一个包括n 个整数的数组nums和 一个目标值target。找出nums中的三个整数,使得它们的和与target最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).思路:和15题一样,使用...原创 2020-03-16 15:52:36 · 201 阅读 · 0 评论 -
Leetcode15. 三数之和-python
难度:中等给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]...原创 2020-03-15 21:36:22 · 212 阅读 · 0 评论 -
Leetcode12. 整数转罗马数字-python
难度:中等罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做II,即为两个...原创 2020-03-15 15:14:15 · 238 阅读 · 0 评论 -
Leetcode11. 盛最多水的容器-python
难度:中等给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0)。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且n的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容...原创 2020-03-15 14:44:14 · 189 阅读 · 0 评论 -
Leetcode10. 正则表达式匹配-python
难度:困难给你一个字符串s和一个字符规律p,请你来实现一个支持 '.'和'*'的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖整个字符串s的,而不是部分字符串。说明:s可能为空,且只包含从a-z的小写字母。p可能为空,且只包含从a-z的小写字母,以及字符.和*。示例 1:输入:s ...原创 2020-03-15 14:20:36 · 248 阅读 · 0 评论 -
Leetcode8. 字符串转换整数 (atoi)-python
难度:中等请你来实现一个atoi函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字...原创 2020-03-10 18:18:35 · 164 阅读 · 0 评论 -
Leetcode6. Z 字形变换-python
难度:中等将一个给定字符串根据给定的行数,以从上往下、从左到右进行Z 字形排列。比如输入字符串为 "LEETCODEISHIRING"行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。请你实现这个将字符串进行...原创 2020-03-10 16:26:29 · 311 阅读 · 0 评论 -
Leetcode5. 最长回文子-python
难度:中等给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"思路(错误):回文最常见的一种思路是倒置在处理,我初步想法是倒置后,找原字符串和倒置字符串的最大公共字串,这个有用到了动态规划......原创 2020-03-10 15:21:57 · 203 阅读 · 0 评论 -
ACM算法学习-动态规格
动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使问题能通过递推或者分治的方式去解决动态规划问题,要明确状态和转移两个问题例题1:数字三角形问题:规则:往下走(正下、右斜下),求和最大73 88 1 02 7 4 44 5 2 6 57+3+8+7+5=30状态:定义状态f[i][j]表示从(1,1)除非走到(i,j)所有路径的最大和,例如f[3...原创 2020-03-10 14:57:42 · 1034 阅读 · 0 评论 -
Leetcode4. 寻找两个有序数组的中位数-python
难度:困难给定两个大小为 m 和 n 的有序数组nums1 和nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为O(log(m + n))。你可以假设nums1和nums2不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3,...原创 2020-03-09 15:24:56 · 206 阅读 · 0 评论 -
Leetcode3. 无重复字符的最长子串-python
难度:中给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无...原创 2020-03-09 15:09:50 · 224 阅读 · 0 评论 -
Leetcode2. 两数相加-python
给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -...原创 2020-03-09 14:46:31 · 194 阅读 · 0 评论 -
leetcode38. 外观数列
思路:最关键的理解外观数列,我举例一个长的例子来说7. 131122218. 11132132118的由来是因为7的序列1/3/11/222/1 ->一个1/一个3/两个1/三个2/一个1->11/13/21/321/1首先我们可以递归可以循环,假设:每次循环我求上一次的外观数列,那么第一次为1,往后一次求2、3、4...n对于n-1的数列,我们进行...原创 2020-02-01 23:20:44 · 331 阅读 · 0 评论 -
leetcode101. 对称二叉树
思路:用树的遍历的思路即可解决(用递归实现),首先我想的结束条件是只要树为空即返回成功,然后如果当前节点值相同、左子树、右子树对应相同即可特殊处理:如果创造一个对称树或者创造一个一摸一样的树会浪费很长时间,这里用了一个特殊技巧就是这个代码return A(root,root);可以创造一个相同的树,在A函数中进行比较遇到的坑,本以为只要任意一个树是空就true,但是忘记了遍历的时...原创 2020-02-01 22:41:19 · 145 阅读 · 0 评论 -
leetocde234. 回文链表
思路:这个题的方法有很多,我这里采用的是一种转换思路,首先遍历所有结点并且把结点都取出来放到StringBuilder对象里,然后转换成Sring比较s与s的倒置,代码如下(错误):/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next;...原创 2020-01-12 12:00:33 · 137 阅读 · 0 评论 -
leetcode226. 翻转二叉树
思路:先序、后序、中序遍历,然后每次都进行左右子树的交换。遇到的坑:中序遍历时,先遍历一个树,在交换左右子树,再遍历时,其实还这个这个树(大家可以细品)先序递归:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * ...原创 2020-01-12 11:23:28 · 168 阅读 · 0 评论 -
leetcode232. 用栈实现队列
思路:用两个栈即可完美实现队列,因为栈a元素都倒到栈b,则栈b就是先进后出的队列顺序,当输出是输出输出栈b的栈顶,当输入时,则押入输入栈a,当b内没元素时,就把a中元素都倒入b,当a、b都空时即以为该队列为空。class MyQueue { //定义两个栈,一个为输入栈,一个为输出栈 Stack<Integer> a; Stack<Integer&g...原创 2020-01-12 11:11:58 · 157 阅读 · 0 评论 -
leetcode206. 反转链表
思路:进行分类,输入0个元素和1个元素时,直接返回头节点即可,输入2个元素时,让第二个元素next指向第一个元素,第一个元素next指向空,返回第二个元素即可。当输入三个元素时,我们可以让元素next依次指向前一个元素,但是如果该元素next指向了前一个元素,后一个元素就找不到了啊?所有,我们设置三个三个指针p1-3,p1是被指向的前一个元素,p2是当前元素,p3是记录当前元素的下一个元素,每次p...原创 2020-01-12 10:54:53 · 112 阅读 · 0 评论 -
leetcode58. 最后一个单词的长度
定给一个仅所有游戏大小写字母状语从句:空格 ' ' 的字符串,返回其最后一个单词的长度。如果不存在最后一个单词,请返回0。说明:一个单词是指由字母组成,但不包含任何空格的字符串。示例:输入: “Hello World”输出: 5思路:特殊情况:一个单词情况(无空格),无单词情况(长度为0),正常情况。优先判断特殊情况,对于正常情况,利用lastIndexOf函数和length函数做差即可。遇...原创 2018-06-08 15:31:21 · 242 阅读 · 0 评论 -
leetcode53. 最大子序和
给定一个整数数组 ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 nums示例:输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组[4,-1,2,1]的和最大,为6 。进阶:如果你已经实现复杂度为O(n)的解法,尝试使用更为精妙的分治法求解。思路:暴力解决,直接循环遍历,计算所有的组合,选出最大的和即可。class Solu...原创 2018-06-08 14:52:49 · 273 阅读 · 0 评论 -
leetcode38. Count and Say
count-and-say序列是前五个项的整数序列,如下所示:12. 113. 214. 12115. 1112211 读取为或。读取为或。读取为,然后或。 "one 1" 1111 "two 1s" 2121 "one 2 one 1" 1211给定一个整数n,生成count-and-say序列的第n项。 注意:整数序列的每一项都将以字符串形式表示。例1:输入: 1 输...原创 2018-06-08 14:41:13 · 219 阅读 · 0 评论 -
leetcode66. 加一
定给一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。最高位数字存放在数组的首位,数组中每个元素只存一个数字。你可以假设除了整数0之外,这个整数不会以零开头。示例1:输入: [1,2,3] 输出: [1,2,4] 解释:输入数组表示数字123。示例2:输入: [4,3,2,1] 输出: [4,3,2,2] 解释:输入数字表示数字4321。思路:将数组转换成字符串再转换成...原创 2018-06-11 18:56:57 · 171 阅读 · 0 评论 -
leetcode35. 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0思路:遍历比较数值,返回对应...原创 2018-06-04 17:57:41 · 295 阅读 · 0 评论 -
leetcode28. 实现strStr()
实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = "hello", needle = "ll"输出: 2示例 2:输入: haystack = "aaaaa", needle = "bba"输出...原创 2018-06-04 17:42:17 · 234 阅读 · 0 评论