自定义博客皮肤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

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

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

原创 【Leetcode每日一题】292. Nim 游戏

Leetcode每日一题题目链接: 292. Nim 游戏难度: 简单解题思路: 经典的Nim博弈。对于Nim博弈,应该有N-position和P-position。N-position为先手必胜,P-position定义为先手必败。对于一个固定的博弈场景,每步操作都在N-position和P-position之间轮转。对于此题就是判断当前的位置是N-position还是P-position。找规律如下:1 2 3 4 5 6 7 8 9 10 11 12o o o x o o o x o o

2021-09-18 16:30:31 298

原创 树莓派3b+构建Docker深度学习环境(ubuntu16.04+tensorflow+keras+opencv)

在树莓派3b+下的深度学习环境,集成了tensorflow,keras,opencv.项目地址:https://github.com/xikyang/raspberry_docker_opencv_tensorflow_keras使用说明从上述的项目clone,输入以下命令:nohup sudo docker build -t yourname:v1.0 . &等待一个小时左右构建成功。环境版本说明:库版本tensorflow1.13keras2.24

2021-06-02 22:00:29 380 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 368

原创 【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 288

原创 【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 226

原创 【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 240 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 354

原创 【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 292 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 210 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 248

原创 【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 278

原创 【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 234

原创 【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 228

原创 【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 228

原创 【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 229

原创 【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 237

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

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

2020-12-11 11:39:43 255

原创 【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 344

原创 【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 253

原创 【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 539

原创 【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 330

原创 【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 255

原创 【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 421 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 367

原创 【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 367

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

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

2020-12-02 11:08:53 430

原创 【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 362 2

原创 【Leetcode每日一题】767. 重构字符串(大顶堆+贪心)

Leetcode每日一题题目链接: 767. 重构字符串难度: 中等解题思路: 设置一个大顶堆,每次取出现最多的字符和次多的字符。将这两个字符排入结果。每次重构完后要重新将更新的字符数量push进入大顶堆,直到大顶堆为空。注意python的heapq是小顶堆,所有对字符出现的次数取负,可以实现大顶堆。题解:import heapqclass Solution: def reorganizeString(self, S: str) -> str: if len(S)

2020-11-30 12:48:26 377 2

原创 【Leetcode每日一题】976. 三角形的最大周长(滑动窗口)

Leetcode每日一题题目链接: 976. 三角形的最大周长难度: 简单解题思路: 采用一种基于贪心的策略,将数组排好序后从大大小设置一个滑动窗口,窗口大小为3。判断是否可以组成三角形,第一个组成的三角形极为最大周长的三角形。题解:class Solution: def largestPerimeter(self, A: List[int]) -> int: A.sort() max_area = 0 for i in reverse

2020-11-29 07:42:02 395 4

原创 【Leetcode每日一题】493. 翻转对(离散化+线段树/树状数组)

Leetcode每日一题题目链接: 493. 翻转对难度: 困难解题思路: 这道题可以看作是求逆序对的变种题。将题中的条件(如果 i < j 且 nums[i] > 2*nums[j])看作是逆序对。可以用线段树/树状数组或者是归并方法用O(nlogn)的时间复杂度求得。但是对于此题还需要进行离散化,来记录当前值和它的二倍的值(这样可以直接在离散化数组中找到2倍的值)。可以得到一个整体的大小信息。用线段树记录当前值所在整体的位置(大小)的数量。然后进行查询时查找 (当前值*2,结束位置(最

2020-11-28 14:19:54 444

原创 【Leetcode 每日一题】454. 四数相加 II(预处理优化)

Leetocde 每日一题题目链接: 454. 四数相加 II难度: 中等解题思路: 四个数组中的元素相加等于0的个数。若纯暴力四个for循环肯定是不行的。所以可以将四个数组划分成两个部分,每部分对两个数组进行加法预处理。这样可将时间复杂度降到 O(n^2)。题解:...

2020-11-27 10:55:41 386

原创 【Leetcode每日一题】164. 最大间距(桶排序+分块)

Leetcode每日一题题目链接: 164. 最大间距难度: 困难解题思路: 由于要在线性时间复杂度内完成排序,所以可以使用桶排序。但是由于整个数据集在32位整数之内,所以对整个数据集进行分块。共分成 len(nums) 个分块(分块策略可以自定)。若相邻两个数之间有空的分块(未分配数据),那么它的间距一定大于分块内的间距;若无空的分块,那么他的分块大小为1;所以不用考虑分块内的间距。最后只计算分块间的间距大小即可。题解:class Solution: def maximumGap(sel

2020-11-26 11:32:51 405

原创 【Leetcode每日一题】 1370. 上升下降字符串(水题)

Leetcode 每日一题题目链接: 1370. 上升下降字符串难度: 简单解题思路: 将字符串转化成字典,并对key关键字进行排序。然后从小到大,从大到小进行拼接。题解:class Solution: def sortString(self, s: str) -> str: # 记录每个字符出现的次数 support = {} for example in s: support[example] = support.

2020-11-25 11:49:13 339

原创 【Leetcode 每日一题】222. 完全二叉树的节点个数(二叉树层次遍历)

Leetcode 每日一题题目链接: 222. 完全二叉树的节点个数难度: 中等解题思路: 对二叉树进行层次遍历,每遍历到一个节点,记录数量。题解:# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution

2020-11-24 10:59:10 339

原创 【Leetcode每日一题】452. 用最少数量的箭引爆气球(贪心,区间问题)

Leetcode 每日一题题目链接: 452. 用最少数量的箭引爆气球难度: 中等解题思路: 先按照区间的左端点为第一关键字,右端点为第二关键字升序排序。从左到右若某个点的左端点大于前一个的右端点则说明要使用一只箭,同时太的更新前一个的右端点为当前的最小右端点!题解:class Solution: def findMinArrowShots(self, points: List[List[int]]) -> int: if points == []:

2020-11-23 11:02:48 364 2

原创 【Leetcode每日一题】242. 有效的字母异位词(水题)

Leetcode每日一题题目链接: 242. 有效的字母异位词难度: 简单解题思路: 判断两个单词是否是字母异位词(不看位置同构的词)。记录两个单词的字母出现次数是否是相等的。题解:class Solution: def isAnagram(self, s: str, t: str) -> bool: if len(s) != len(t): return False visit = {} for example

2020-11-22 09:32:34 248

原创 【Leetcode 每日一题】148. 排序链表(排序)

Leetcode每日一题题目链接: 148. 排序链表难度: 中等解题思路: 将链表转化为列表进行排序,排序后重新赋值到链表题解:# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: def sortList(se

2020-11-21 08:57:53 363

原创 【Leetcode题解】37. 解数独(预处理+DFS)

Leetcode题解题目链接: 37. 解数独难度: 困难解题思路: 一道很明显的搜索题,用DFS来求解。但是需要对数据进行预处理。记录一下某个为被覆盖的点的行、列、3*3方块内的所有备选值。可以很有效的减少搜索次数。逻辑很简单,详见代码。题解:class Solution: def solveSudoku(self, board: List[List[str]]) -> None: """ Do not return anything, modify

2020-11-20 18:46:01 420 1

原创 【Leetcode每日一题】147. 对链表进行插入排序(链表排序)

Leetcode每日一题题目链接: 147. 对链表进行插入排序难度: 普通解题思路: 设置一个新的链表,在原链表中找到一个比当前节点小的值,插入到新链表中,直至全部插完。题解:# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def ins

2020-11-20 13:12:39 296

原创 【Leetcode每日一题】283. 移动零(水题)

Leetcode每日一题题目链接: 283. 移动零难度: 简单解题思路: 先记录列表中所有0的个数并删除,在结尾加上相应个数的0。题解:class Solution: def moveZeroes(self, nums: List[int]) -> None: """ Do not return anything, modify nums in-place instead. """ cnt = nums.count(0

2020-11-19 08:45:30 354

考研数据结构代码大全

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

2020-10-26

空空如也

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

TA关注的人

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