leetcode算法题
ZJE_ANDY
这个作者很懒,什么都没留下…
展开
-
leetcode-----39. 组合总和
解法:回溯法回溯法的意思是:当面临多种选择时,不确定走哪一种,就先选一条走,若走不通,再返回,走第二条。图形:回溯的实现方式有多种,这道题,用递归来实现,就叫递归回溯法。我们知道递归的形状就像是栈,先进后出,那递归回溯就像是一棵树,深度遍历(dfs)这棵树的过程。思路:根据示例 1:输入: candidates = [2,3,6,7],target = 7。候选数组里有 2 ,如果找到了 7 - 2 = 5 的所有组合,再在之前加上 2 ,就是 7 的所有组合;同理考虑 3,如果找..原创 2020-06-06 22:21:04 · 181 阅读 · 0 评论 -
leetcode-------解数独(回溯法)
如:方法:回溯法:回溯法的思想就是:对于一个问题有多个选择方式,先选择一个方式执行下去,若在执行过程中,发现不符合规则,则回退,回到选择方式的步骤,进而选择其他方式,继续试。重要:对于回溯法,一定会有个[规则],这个[规则]将会决定是否回退,所以当我们在使用回溯法时,一定要留意能否构建[规则]。如这一题,在数独中,规则就是:1. 在同一列和同一行中,不能出现一样的数字。...原创 2020-05-01 17:55:51 · 631 阅读 · 0 评论 -
leetcode-----买卖股票最佳时机1、2、3(暴力法,动态规划)
解法1:(暴力法)首先,最简单的方法,暴力法:两个循环,枚举所有买股票和买股票的可能,及其他们的收益。取最大的收益。class Solution: def maxProfit(self, prices) -> int: profit = 0 for i in range(len(prices)): for j ...原创 2020-04-14 12:50:04 · 357 阅读 · 0 评论 -
leetcode-----串联所有单词的子串(滑动窗口)
滑动窗口:滑动窗口 一般用来处理字符型问题。我们从题目中可以知道,要寻找的字串长度其实是可以算出来的,因为words列表中,每个单词都必须长度一致,所以子串长度就等于 words中的单词个数*单词的长度 。如下图:黑色的是所给的字符串,红色的是子字符串长度。由于红色的是定长,所以把红色的作为窗口,在黑色中一步步滑动就行了。准备工作:1. 用字典记录 words列表中的单...原创 2020-04-13 19:21:04 · 275 阅读 · 0 评论 -
leetcode---------有效的括号(栈)
解法:看到这些判断左右对称的题,首先想到的就是用栈。首先指定括号间的配对关系,例如 “()”,“[ ]”,“{ }”。用一个变量map_dict装着,让程序知道“)”和“(”,“]”和“[”是配对的。然后把不在map_dict的key中的字符放如栈stack中,等待匹配。若遍历到map_dict的key中的字符(右括号),则把栈顶字符出栈,判断出栈的这个字符是否是遍历到的右括号...原创 2020-03-27 20:30:55 · 221 阅读 · 0 评论 -
leetcde-------求柱状图中最大的矩形(动态规划,中心扩展)
解法一:暴力枚举法:思路:枚举出,每一列对应的最大矩形。最后找出最大的那个即可。首先,要想找到第 i 位置最大面积是什么?是以i 为中心,向左找第一个小于 heights[i] 的位置 left_i;向右找第一个小于于 heights[i] 的位置 right_i,即最大面积为 heights[i] * (right_i - left_i -1),如下图所示:代码:c...原创 2020-03-27 19:25:53 · 462 阅读 · 0 评论 -
leetcode------接雨水(动态规划,双指针)
解法一:按行算:整个思路就是,求第i层的水,遍历每个位置,如果当前的高度小于i,并且两边有高度大于等于i的,说明这个地方一定有水,水就可以加 1。如果求高度为i的水,首先用一个变量temp保存当前累积的水,初始化为00。从左到右遍历墙的高度,遇到高度大于等于i的时候,开始更新temp。更新原则是遇到高度小于i的就把temp加1,遇到高度大于等于i...原创 2020-03-23 14:07:29 · 629 阅读 · 0 评论 -
leetcode-----寻找不同路径1,2,3(动态规划、回溯法)
在判断一个问题能不能使用动态规划解决时,首先要判断:1. 每个阶段的状态或值是否能通过上一阶段的状态或值推导出来 (满足)2. 每个阶段的状态或值一旦决定,是不受后面阶段的状态或值影响的 (满足)3. 是否有重复子问题的计算 (满足)4. 是否有边界 (满足)下面仔细讲上述4个点:1.。每个阶段的状态或值是否能通过上一阶段的状态或值推导出来 由于题目说...原创 2020-03-20 17:38:23 · 958 阅读 · 0 评论 -
leetcode-----矩阵向右旋转90°
题目:思路其实就是记住:向右旋转就是:先把矩阵进行转置,再没行倒序。额外,向左旋转则是把矩阵转置就可以了。class Solution: def rotate(self, matrix): """ :type matrix: List[List[int]] :rtype: void Do not return anythin...原创 2020-03-19 22:25:15 · 950 阅读 · 0 评论 -
leetcode-----N皇后问题
皇后可以直走,横走,斜着走。回溯法:回溯法的意思是,在某个位置放下皇后后,发现并不符合规则,然后就把这个皇后拿起来重新放,可以理解为悔棋。在解皇后问题时,我们需要知道的是,西洋棋牌的主对角线(hill_diagonals)和次对角线(dale_diagonals)的一个关系:主对角线:行序号+列序号 = 常数次对角线:行序号-列序号 = 常数class Sol...原创 2020-03-01 19:28:27 · 362 阅读 · 0 评论 -
leetcode--------找出字符串中最长的回文字符串(动态规划、中心扩展法)
方法一:暴力解法把一个字符串中的所有子字符串提取出来把每个子字符串分别验证是否为回文字符串class Solution: def func(self,s:str): max_len = 0 res = None n = len(s) for i in range(n-1): for j i...原创 2020-02-28 22:09:09 · 1069 阅读 · 0 评论 -
leetcode题---------合并K个有序链表
方法一:最容易想到的,就是暴力解法先遍历所有的链表,将所有的结点的值放到一个列表中。再将这个列表排序。再把列表里的值重新构建成一个链表class ListNode(object): def __init__(self, x): self.val = x self.next = Nonedef generateList(l: l...原创 2020-02-24 20:57:36 · 265 阅读 · 0 评论 -
leetcode题----回文数的判定(双指针,双向队列)
回文数:指从左到右和从右到左看起来是一样的,如121,25852,但-121不是回文数,因为有负号。法一,将int转化为str:双向队列时间复杂度:O(n^2) [因为每次pop(0)的时间复杂度都是O(n),因为pop(0)从列表头删除结点,需要重新排列,而pop()则快得多)]def func(x): x = list(str(x)) while len(x)&...原创 2020-02-23 17:24:27 · 359 阅读 · 0 评论 -
leetcode题----寻找字符串中无重复字符串的最长字串----滑动窗口法
寻找字符串中最大的无重复字符串长度:思路:这道题主要用到思路是:滑动窗口什么是滑动窗口?其实就是一个队列,比如字符串中的 abcabcbb,进入这个队列(窗口)为 abc 满足题目要求,当再进入 a,队列变成了 abca,这时候不满足要求。所以,我们要移动这个队列!如何移动?我们只要把队列的左边的元素移出就行了,直到满足题目要求!一直维持这样的队列,找出队列出现最长的...原创 2019-12-18 15:13:48 · 498 阅读 · 0 评论 -
leetcode题---链表中的两数相加
解题思路一:最简单的,就是把两组组合成数字,再运用相加相加,再分拆各个数位上的数字。但这样做耗时太大解题思路二:先把两个数字个位数拿出来(例如题中的2和5),判断有没有进位(即是否大于9),若有进位,则carry=进位数 否则为0。然后当两个数字的十位上的数字相加时,还得把carry加上,再判断是否有进位。(做加数问题一定要注意:整除操作和求余操作,与10整除能判断是否存在进位,与...原创 2019-12-13 14:47:48 · 308 阅读 · 0 评论