自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

YancyKahn

日拱一卒无有尽,功不唐捐终入海。

  • 博客(25)
  • 资源 (1)
  • 收藏
  • 关注

原创 【Leetcode每日一题】455. 分发饼干(贪心)

Leetcode每日一题题目链接: 455. 分发饼干难度: 简单解题思路: 对胃口和饼干尺寸数组进行排序,从小到大进行判断,若当前饼干的尺寸够给当前孩子就分配,否则不分配。题解:class Solution: def findContentChildren(self, g: List[int], s: List[int]) -> int: if s == []: return 0 g.sort() s.sort

2020-12-25 12:14:38 387

原创 【Leetcode每日一题】135. 分发糖果(贪心)

Leetcode 每日一题题目链接: 135. 分发糖果难度: 困难解题思路: 每个孩子最少一个,相邻孩子评分高的比评分低的多一个糖果。贪心从左到右和从右到左分别计算出当前孩子应得的糖果。然后取左右的最大值即可。题解:class Solution: def candy(self, ratings: List[int]) -> int: length = len(ratings) left = [1 for _ in range(length)]

2020-12-24 12:14:00 295

原创 【Leetcode每日一题】387. 字符串中的第一个唯一字符(水题)

Leetcode 每日一题题目链接: 387. 字符串中的第一个唯一字符难度: 简单解题思路: 遍历直接返回第一个唯一字符的位置,没有则返回-1。题解:class Solution: def firstUniqChar(self, s: str) -> int: count = collections.Counter(s) for i in range(len(s)): if count[s[i]] == 1:

2020-12-23 12:41:24 251

原创 【Leetcode每日一题】103. 二叉树的锯齿形层序遍历(BFS, 二叉树层次遍历)

Leetcode 每日一题题目链接: 103. 二叉树的锯齿形层序遍历难度: 中等解题思路: 用BFS来处理,每次处理整个队列中的值(每一层)。这道题和222. 完全二叉树的节点个数(二叉树层次遍历) 类似,都是进行层次遍历,只不过这个要考虑某个节点处于的层。题解:# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# s

2020-12-22 12:52:54 267 2

原创 【Leetcode每日一题】746. 使用最小花费爬楼梯(动态规划)

Leetcode每日一题题目链接: 746. 使用最小花费爬楼梯解题思路: 每次爬楼梯有两种选择,分别为走一步和走两步,所以可以选择每次花费最小的进行操作。可以写出状态转移方程。dp[i]表示到达第I层阶梯最小的花费。下面可以写出状态转移方程。注意要对所有的位置进行判断,所以最后的遍历终点为length + 1.dp[i]=min(dp[i−1]+cost[i−1],dp[i−2]+cost[i−2]);i:2→length+1dp[i] = min(dp[i - 1] + cost[i - 1],

2020-12-21 13:41:20 386

原创 【Leetcode每日一题】316. 去除重复字母(栈,贪心)

Leetcode 每日一题题目链接: 316. 去除重复字母难度: 中等解题思路: 每次当前的字符是否是小于栈顶元素的,若不小于将其pop。还需要记录某个字符是否已经在栈中出现,若已经出现过则不用在进行比较。题解:class Solution: def removeDuplicateLetters(self, s: str) -> str: count = collections.Counter(s) visit = set()

2020-12-20 09:50:08 323 1

原创 【Leetcode每日一题】48. 旋转图像(数组)

Leetcode 每日一题题目链接: 48. 旋转图像难度: 中等解题思路: 分为两步,首先将矩阵matrix的上下行交换(第一行和最后一行,第二行和倒数第二行)。这样做完后可以发现得到的矩阵只需要进行转置就可以得到旋转90°的结果。(a00a01a10a11)∗(0110)=swap(a10a11a00a01)⟶Transpos(a10a00a11a01)\begin{gathered}\begin{pmatrix} a_{00} & a_{01} \\ a_{10} & a

2020-12-19 11:35:43 233 1

原创 【Leetcode每日一题】389. 找不同(异或法求解,击败100%用户时间)

Leetcode每日一题题目链接: 389. 找不同难度: 简单解题思路: 异或的性质:任何数异或自己都为0;任何数异或0都等于自己。 所以让0对s和t分别进行异或,剩下的就是加入的数。C++和Python的效率差别还是很大的,相同的逻辑C++能超越100%时间。题解:# python3 击败61%时间class Solution: def findTheDifference(self, s: str, t: str) -> str: res = 0

2020-12-18 11:12:51 255

原创 【Leetcode每日一题】714. 买卖股票的最佳时机含手续费(动态规划)

Leetcode 每日一题题目链接: 714. 买卖股票的最佳时机含手续费难度: 中等解题思路: 某一天有持有或者不持有股票两种状态。写出如下状态转移方程。dp[i][0]表示第i天不持有股票,dp[i][1]持有股票。dp[i][0]=max(dp[i−1][0],dp[i−1][1]+prices[i]−fee);dp[i][0] = max(dp[i - 1][0], dp[i - 1][1] +prices[i] - fee); dp[i][0]=max(dp[i−1][0],dp[i−

2020-12-17 12:23:28 285

原创 【Leetcode每日一题】290. 单词规律(水题)

Leetcode每日一题题目链接: 290. 单词规律难度: 简单解题思路: 这道题的意思就要是对pattern和s中的单词进行一一对应,若不能一一对应则说明是错误的匹配。按照这个逻辑进行处理就行了。题解:class Solution: def wordPattern(self, pattern: str, s: str) -> bool: words = s.split(' ') if len(words) != len(pattern):

2020-12-16 11:04:40 242

原创 【Leetcode每日一题】738. 单调递增的数字(模拟)

Leetcode每日一题题目链接: 738. 单调递增的数字难度: 中等解题思路: 从地位到高位进行模拟,若当前位的值小于高位的指,那么当前位就要向高位借位,并且当前位的指赋值为9。考虑到有0出现,所以在最后还需要进行一次处理,若当前位为题解:class Solution: def monotoneIncreasingDigits(self, N: int) -> int: digit = [int(d) for d in str(N)] flag

2020-12-15 11:00:26 238

原创 【Leetcode每日一题】49. 字母异位词分组(水题)

Leetcode每日一题题目链接: 49. 字母异位词分组难度: 中等解题思路: 对每个字符串进行排序,得到字典序最小的作为标志,用dict存下来,最后将相同标志的放到一个组里。题解:class Solution: def groupAnagrams(self, strs: List[str]) -> List[List[str]]: res = defaultdict(list) for item in strs: sor

2020-12-14 16:37:50 256

原创 【Leetcode每日一题】217. 存在重复元素(水题)

Leetcode 每日一题题目链接: 217. 存在重复元素难度: 简单解题思路: 记录数字出现的次数,大于1为真。题解:class Solution: def containsDuplicate(self, nums: List[int]) -> bool: count = collections.Counter(nums) for item in count: if count[item] > 1:

2020-12-13 11:11:58 241

原创 【Leetcode每日一题】376. 摆动序列(贪心)

Leetcode每日一题题目链接: 376. 摆动序列难度: 中等解题思路: 选择这个序列中的极大值点和极小值点作为序列即可。用贪心来实现。题解:class Solution: def wiggleMaxLength(self, nums: List[int]) -> int: if len(nums) < 2: return len(nums) res = 1 pre = 0

2020-12-12 12:48:36 269

原创 【Leetcode 每日一题】649. Dota2 参议院(贪心)

Leetcode 每日一题题目链接: 649. Dota2 参议院难度: 中等解题思路: 最优的策略是前一个议员一定要禁止后一个最先发言的不同阵营的议员,这样才能保证对本阵营最优。以使得本阵营的越少的人被禁止。按照这个逻辑来完成就行了。题解:...

2020-12-11 11:39:43 282

原创 【Leetcode每日一题】860. 柠檬水找零(贪心)

Leetcode每日一题题目链接: 860. 柠檬水找零难度: 简单解题思路: 找零的数只可能是5,10, 15。但是票面只能是5,10。先找零10,再找零5。贪心一遍即可求出答案。题解:class Solution: def lemonadeChange(self, bills: List[int]) -> bool: count = {5:0, 10:0, 15:0} Flag = True for bill in bills:

2020-12-10 11:27:11 383

原创 【Leetcode每日一题】62. 不同路径(动态规划)

Leetcode每日一题题目链接: 62. 不同路径难度: 中等解题思路: 这道题是一道很基础的动态规划题,从左上角到右下角一共有多少种方式。显而易见,若第0行和第0列的路径数量肯定为1,需要进行初始化。可以很容易写出状态转移方程:dp[i][j]=dp[i−1][j]+dp[i][j−1];i:1→m;j:1→ndp[i][j] = dp[i - 1][j] + dp[i][j - 1]; i:1 \rightarrow m; j:1\rightarrow ndp[i][j]=dp[i−1]

2020-12-09 10:27:02 275

原创 【Leetcode 每日一题】842. 将数组拆分成斐波那契序列(DFS)

Leetcode 每日一题题目链接: 842. 将数组拆分成斐波那契序列难度: 中等解题思路: 用DFS进行搜索,判断是否为斐波那契数列。题解:class Solution: def splitIntoFibonacci(self, S: str) -> List[int]: res = list() def dfs(index): if index == len(S): r

2020-12-08 10:21:44 552

原创 【Leetcode每日一题】861. 翻转矩阵后的得分(贪心)

Leetcode每日一题题目链接: 861. 翻转矩阵后的得分难度: 中等解题思路: 要使翻转后的值尽可能大,那么使得它的首位为1,每一列的1尽可能多即可。具体做法为:翻转行使得第一行一定为1,翻转列使得每一列的1尽可能多。翻转完再计算值。题解:class Solution: def matrixScore(self, A: List[List[int]]) -> int: if len(A) == 0: return 0 #

2020-12-07 09:50:13 380

原创 【Leetcode每日一题】118. 杨辉三角(水题)

Leetcode每日一题题目链接: 118. 杨辉三角难度: 简单解题思路: 无。见代码。题解:class Solution: def generate(self, numRows: int) -> List[List[int]]: if numRows == 0: return [] yangTrangle = [[1]] for i in range(1, numRows): yang

2020-12-06 11:31:14 281

原创 【Leetcode每日一题】621. 任务调度器(排序 可用堆/优先队列进行优化)

Leetcode 每日一题题目链接: 621. 任务调度器难度: 中等解题思路: 对任务按照出现的次数进行排序,然后每次从出现次数最多的数开始,向后取n个,不够n的话补齐。 这个排序过程可以用堆或者是优先队列进行优化。本文未作优化。题解:class Solution: def leastInterval(self, tasks: List[str], n: int) -> int: # 对任务按照出现的次数进行排序 ntasks = collectio

2020-12-05 14:07:39 440 1

原创 【Leetcode每日一题】659. 分割数组为连续子序列(堆 + 贪心)

Leetcode每日一题题目链接: 659. 分割数组为连续子序列难度: 中等解题思路: 设置一个堆,里面存储一个MAP,对应的key存储某个子序列的结束的值,value存储当前子序列的长度。这个小顶堆按照value进行排序。每次若能在堆中找到可以添加在后面的序列就加上去,若不行就创建一个新的子序列加入堆顶。题解:import heapqclass Solution: def isPossible(self, nums: List[int]) -> bool:

2020-12-04 11:33:46 396

原创 【Leetcode每日一题】204. 计数质数(欧拉线性筛)

Leetcode每日一题题目链接: 204. 计数质数难度: 简单解题思路 : 查找小于n的素数的个数,先用欧拉筛法初始化到所有的素数。然后再统计结果。题解:class Solution: def countPrimes(self, n: int) -> int: if n <= 1: return 0 # 欧拉筛法(小于) visit = [0] * n visit[0] = visit[

2020-12-03 10:10:21 382

原创 【Leetcode每日一题】321. 拼接最大数(单调栈)

Leetcode 每日一题题目链接: 321. 拼接最大数难度: 困难解题思路: 首先确定每个数组取的字符的数量。满足两者x + y = k。其中x和y分别是两个字符数组的中取值的数量。分别从这两个大的字符数组中取其中的最大的子序列。通过对这些子序列的字典序比较,获取到最大的拼接数。在获取拼接数的时候可以使用单调栈进行操作。保证栈顶存的一直是字典序相对较大的序列。题解:class Solution: def maxNumber(self, nums1: List[int], nums2:

2020-12-02 11:08:53 467

原创 【Leetcode每日一题】34. 在排序数组中查找元素的第一个和最后一个位置(二分、lower_bound、upper_bound)

Leetcode 每日一题题目链接: 34. 在排序数组中查找元素的第一个和最后一个位置难度: 中等解题思路: 这道题题意很明显,就是二分查找。即为C++中的 lower_bound 和 upper_bound 函数。这里给出python3的版本。题解:class Solution: def searchRange(self, nums: List[int], target: int) -> List[int]: if len(nums) == 0:

2020-12-01 10:09:05 391 2

考研数据结构代码大全

考研期间总结的数据结构代码大全,包括列表,栈,队列,树,图,查找,字符串,排序等数据结构的实现C语言实现版本,需要的朋友可以参考一下。

2020-10-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除