![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
clierwang
所有原创文章注明出处即可转载。
博主的网站为learkc.com,欢迎访问。
展开
-
(leetcode 23)合并K个排序链表(选值法、两种排序)
原题如下:1、选值法笔者见到这个题第一时间想到的是归并排序,每次挑选出所有链表第一个节点中,全部最小的值(假设有n个),建立新链表。被选中的老链表节点后移一位,新链表生长n位。例如:[1->4->5,1->3->4,2->6](1)第一次选择后:老链表:[4->5,3->4,2->6]新链表:[1->1](2)第二次选择后:老链表:[4->5,3->4,6]新链表:[1->1->2]。。。。。。遇原创 2020-06-07 23:18:22 · 273 阅读 · 0 评论 -
(leetcode292)Nim游戏(位运算的巧妙用法)
原题如下:思路:这是一道简单的题,难点在于考虑题中“都是聪明人,聪明人如何移动”这个地方,因为我们先手,这时候分两种情况:n能否被4整除。1、n不能被4整除,例如1,2,3,5,6,7这种,我们可以控制我们每次取之后的结果都是4的倍数,这样无论对面拿几个,他一定拿不到最后一个,这相当于我们保证他赢不了。2、n可以被4整除,这时候我们一定输,因为这时候我们拿了以后相当于让对面可以控制他每次取之后的结果都是4的倍数,我们就赢不了。这是直观的理解,证明可以用数学归纳法,这里笔者略去。因此这个问题可以判原创 2020-05-25 22:27:48 · 331 阅读 · 0 评论 -
(leetcode 295)数据流的中位数(暴力、二分、小顶堆以及进阶)
原题如下:1、暴力法暴力法是把这个问题看成许多分开的求中位数的问题,每次求之前对已有数据排序,然后根据下标求出中位数。时间复杂度在于排序,为O(nlogn)。思路和代码都比较简单,不赘述了。2、二分采用插入排序的思想,从一开始就维护一个有序列表。二分法找到新元素对应的位置后插入,求中位数时根据下标直接提取。二分找位置本身时O(logn)的复杂度,但是插入的时候可能会造成列表后面元素的移动,最坏的时候为O(n)的时间复杂度,因此整体时间复杂度为O(n)。代码:class MedianFi原创 2020-05-24 01:28:57 · 286 阅读 · 0 评论 -
(leetcode 209)长度最小的子数组(双指针法、二分查找)
原题如下:1、双指针法(56ms,15.2mb)因为要求连续区间,可以采用前后指针,t表示前后指针区间内的数字之和。流程1、当t<s,end+=1;2、当t>=s,begin+=1终止条件为end<l。每个元素最多遍历两次,即前指针一次,后指针一次,因此时间复杂度O(n),空间复杂度O(1)。代码:class Solution: def minSubArrayLen(self, s: int, nums: List[int]) -> int:原创 2020-05-22 22:52:09 · 247 阅读 · 0 评论 -
(leetcode220)存在重复元素III(滑动窗口法及其平衡二叉树改进思路、桶排序)
原题如下:1、滑动窗口法设置一个长度为k的滑动窗口,对窗口内元素排序,遍历找出差值最小的元素对,若小于t,则返回True,否则,若直到最后都没有返回True,则返回False。对于t=0,做特判,因为可以根据集合的无序性直接判断而不需要排序,尤其是针对此题的测试用例非常有效。这里必须说明的是,虽然在这个题中表现不错,但是很大程度上有测试用例的功劳,因为对长度为k的窗口排序复杂度为O(klogk),对于n的长度,整体复杂度为O(nklogk),当k接近n的时候复杂度会很大,逼近O(n*nlogn)。原创 2020-05-22 21:34:27 · 445 阅读 · 0 评论 -
(leetcode 201)数字范围按位与的超级详解(暴力法以及剪枝、数学分析法之自顶向下和自底向上)
原题如下:参考链接:1、分析法参考题解链接2、剪枝法参考题解:“Transform”在上面分析法链接下的评论,未找到链接还请谅解开始之前,我们需要想明白一个问题,在每位数按位与的时候,只要出现一次0,这一位的结果必定为0,这是本文优化的必经之路。1、暴力法以及剪枝这道题乍一看挺简单的,很容易写出O(n-m)复杂度的暴力法,即将[m,n]范围的所有数字都与一遍,如下:class Solution: def rangeBitwiseAnd(self, m: int, n: int) -&原创 2020-05-18 23:27:57 · 254 阅读 · 0 评论 -
(leetcode 189)旋转数组(4种思路)
原题如下:参考官方题解链接,代码及本文理解为笔者手写。方案1、n个数每个都后移1位,后移k次。时间复杂度O(n*k),不太推荐。方案2、使用额外n个空间,存储,按照next=(now+k)%len(nums),将now位置的值直接写到新数组的对应的位置,这样没有覆盖值得问题,但是不符合题目要求。空间复杂度O(n),不太推荐。方案3、每位跳k,直到所有位都跳k过程如下:从初始值开始,将0写到0+k位置上,临时原保存0+k位置的值;临时保存的0+k原值写到0+2k的位置上,临时保存0+2k的值原创 2020-05-13 22:59:00 · 245 阅读 · 0 评论 -
(leetcode204)计数质数(暴力法及其优化,厄拉多塞筛法)
暴力法及其优化是笔者的思路和代码,厄拉多塞筛法是学习这篇题解后手写的,(据说还有更快的算法线性筛之类的,,这数学也太顶了)原题如下:1、暴力法及其优化1、对每个小于n的数x都遍历一遍。2、判断x是否为素数,看是否能被小于x的数整除。复杂度为O(n2)。在第二步中,可以不必判断小于x的所有数字,只需要判断[2,√n]之间的数字,例如26,只需判断[2,5]之间的数字即可,因为对后面可能出现的因子,他所对应的因子都会在√n之前出现,比如13,因为已经在2的时候判断过了,就不必再次判断。代码如下:原创 2020-05-13 11:15:26 · 424 阅读 · 0 评论 -
(leetcode338)比特位计数(模拟法、动态规划)
原题如下:笔者思路比较正常,是模拟正常加1情况下的数字变化,规律如下:1、当上一个字符中有0时,下一次运算会将最右位置的0置1,将这个0的位置x后的1全部改为0;这个字符中1的个数为为n+1-(len(s)-1-x),其中n表示上个字符中1的个数,+1表示将最右边的0置1,(len(s)-1)-x代表原来0后边的1的个数,置为0以后减去即可。2、当上一个字符没有0时,所有1变0,同时开头补1。此时n的个数为1。class Solution: def countBits(self, num原创 2020-05-10 13:38:13 · 212 阅读 · 0 评论 -
(leetcode322)零钱兑换 (贪心+dfs、动态规划之自顶向下和自底向上)
leetcode原题,如图:笔者第一想法是,得到所有数值和为amount的组合,取其中最短的组合长度返回,没有则返回-1。根据这个思路,笔者做了深度优先遍历dfs。初始因为剪枝不足而总是超时,最终代码为:class Solution: def coinChange(self, coins: List[int], amount: int) -> int: if amount==0: return 0 coins.sort()原创 2020-05-09 15:43:37 · 464 阅读 · 0 评论 -
(leetcode739)每日温度(暴力法及其改进,巧妙使用栈)
leetcode第739题,原题如下:一、首先想到的是O(n2)暴力法对于每一个元素都向后遍历,直到找到第一个比当前元素大的位置,记录距离差。class Solution: def dailyTemperatures(self, T: List[int]) -> List[int]: l=len(T) lst=[0]*l for...原创 2020-05-08 15:40:09 · 214 阅读 · 0 评论 -
leetcode 字符串的排列(循环以及递归)
一、题目描述二、思路以及代码递归思路:分解字符串,将其视为第一个字符和其余字符的组合,利用这个函数反复得到首字母+其余字符串的全排列,直到其余字符串长度为1返回。最终利用list(set(lst))对lst去重。理解简单,书写便捷,缺点是耗时较久。class Solution: #递归 def permutation(self, s: str): i...原创 2020-03-05 23:51:50 · 637 阅读 · 0 评论 -
(leetcode 4)(python)寻找两个有序数组的中位数
# 一、前言leetcode做的一道比较难的题,主要是算法有关的知识掌握不牢。题目如下:![在这里插入图片描述](https://img-blog.csdnimg.cn/20200208184322821.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNTg0Mzg1,size_16,color_FFFFFF,t_70)原创 2020-02-08 19:10:44 · 433 阅读 · 0 评论