leetcode
ShangM0M0
这个作者很懒,什么都没留下…
展开
-
187.重复的DNA序列
187.重复的DNA序列线性时间窗口切片 + HashSet线性时间窗口切片 + HashSet思想:沿着长度为N的字符串移动长度为L的窗口,将每次移动得到的结果记录下来,如果在记录表中出现这样的字符,则记录在输出表中。否则在记录表中登记该结果。class Solution(object): def findRepeatedDnaSequences(self, s): N=len(s);L=10 #这里设置成set(),后面使用的参数设置为add.原创 2021-05-28 21:51:16 · 82 阅读 · 0 评论 -
Leetcode.328.奇偶链表.python
Leetcode.328.奇偶链表一、拼接奇数链表与偶数链表二、一、拼接奇数链表与偶数链表先将奇数节点和偶数节点分离。奇数节点和偶数节点的头节点分别为:evenhead=head.next,odd=head,even=evenhead.更新奇数节点的时候,odd.next=even.next, odd=odd.next.更新偶数节点的时候,even.next=odd.next, even=even.next.分离完毕的条件是:even/even.next=None.最后,将奇偶链表连接起来od原创 2021-05-15 11:10:37 · 167 阅读 · 0 评论 -
Leetcode.203.移除链表元素.python
Leetcode.移除链表元素指针(哨兵节点)指针(哨兵节点)哨兵节点解密了哨兵节点的提出是为了避免遇到需要删除头节点的情况。其主要目的是使链表标准化,如使链表永不为空、永不无头、简化插入和删除。建立两个指针,一个指向当前节点,一个指向前一个节点。class Solution(object): def removeElements(self, head, val): Newhead=ListNode(0,head) prev,cur=Newhead,head原创 2021-05-09 20:29:58 · 102 阅读 · 0 评论 -
Leetcode.206.反转链表.python
Leetcode.206.反转链表双指针递归双指针和之前283.移动零的想法类似。固定两个指针,一个指针处理以及反转的部分,一个指向待反转的部分。首先建立已经处理部分的指针的初始值:prev=None;建立待处理部分的指针cur;为了防止指针转向后丢失待处理节点之后的部分,首先在链表转向前,使用一个参数保存目前处理节点之后的部分。class Solution(object): def reverseList(self, head): prev=None原创 2021-05-09 19:09:35 · 94 阅读 · 0 评论 -
Leetcode.33.搜索旋转排序数组.python
Leeicode.搜索旋转排序数组字典方法二分法字典方法暴力解法class Solution(object): def search(self, nums, target): dictn={} for i,ele in enumerate(nums): if ele==target: return i return -1二分法重要的是分清target的位置,在前半段还是后半段1.单凭原创 2021-05-08 22:11:53 · 69 阅读 · 0 评论 -
Leetcode.278.第一个错误的版本.python
Leetcode.第一个错误的版本二分法二分法由题意可知:前面的部分都是正确的版本,从第一个错误版本之后的全是错误版本。如果isBadVersion(mid),返回的结果是True,说明找过头的,错误的版本在mid之前(包含mid),r=mid;如果isBadVersion(mid),返回的结果是False,说明还没有找到,错误的版本在mid之后(不包含mid),l=mid+1class Solution(object): def firstBadVersion(self, n):原创 2021-05-08 21:09:42 · 42 阅读 · 0 评论 -
Leetcode.162.最大峰值.python
Leetcode.最大峰值.python二分法二分法和153寻找最小值类似,这里是寻找极值,只需要任意一个极值即可,和两边对比即可。如果nums[mid]>nums[mid+1],峰值在mid左侧(包含md),r=mid; 如果nums[mid]<nums[mid+1],峰值在mid右侧(不包含mid),即l=mid+1.上述分析适用于三种种情况。1.在开端取得峰值,使用前半部分分析来解释。2.在结尾处取得峰值,使用后半部分分析解释3.在中间取得峰值,结合进行分析class S原创 2021-05-08 20:53:34 · 176 阅读 · 0 评论 -
Leetcode.153.寻找旋转排序数组中的最小值.python
Leetcode.寻找排序数组中的最小值快慢指针快慢指针这里使用的是nums[mid]<nums[r]是因为,当上式满足的时候,最小值点一定落在mid左侧(包含mid),故r=mid。而如果nums[mid]>nums[r],则最小值一定在mid右侧(不包含mid),故l=mid+1。如果按照nums[mid]>nums[l],只能判断最小值一定在mid左侧(不包含mid),故l=mid+1,但是当nums[mid]<nums[l]时候,不能保证判断最小值在mid左侧还是右原创 2021-05-08 20:10:06 · 91 阅读 · 0 评论 -
Leetcode.283.移动零.python
Leetcode.移动零.python快慢指针快慢指针使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。在头节点位置分别建立快慢指针,快指针先行,如果快指针指向的节点值不为0,则将快慢指针节点进行交换,交换后的慢指针进行移动,表示已经处理好之前的元素。如果快指针指向的元素不为0,继续移动快指针。class Solution(object): def moveZeroes(self, nums): l,r=0,0 #只有交换后左指原创 2021-05-08 18:43:29 · 75 阅读 · 0 评论 -
Leetcode.142.环形链表II.python
leetcode.环形链表II.python快慢指针快慢指针在已经判定是否存在环形链表的基础上进行操作class Solution(object): def detectCycle(self, head): l=head;r=l #只要r可以顺利遍历,l就一定可以 while r and r.next: l=l.next r=r.next.next if r == l:原创 2021-05-08 18:23:08 · 52 阅读 · 0 评论 -
Leetcode.141.环形链表.python
leetcode.141.环形链表.python快慢指针)哈希表快慢指针)首先特殊情况:空链表与长度为1的链表必没有环快慢指针:快指针每次走两步,慢指针每次走一步如果有环形表,快慢指针终究会相遇,但是未必在终点相遇class Solution(object): def hasCycle(self, head): l=head if l == None or l.next==None: return False r=原创 2021-05-08 18:12:22 · 69 阅读 · 0 评论 -
Leetcode.19.删除链表的倒数第n个节点.python
Leetcode.python.删除链表的倒数第N个节点自己解法(长度)栈自己解法(长度)首先获取链表长度l;寻找链表长度l与倒数第n个节点中n的关系;index=l-n;删除index位置节点即可。细节:长度为0的时候直接返回head(空链表);index=0的时候,相当于删除头节点。class Solution(object): def length(self, head): length = 0 while head:原创 2021-05-08 15:54:05 · 111 阅读 · 0 评论