首页 > 其他分享 >Leetcode刷题第三天-贪心-双指针

Leetcode刷题第三天-贪心-双指针

时间:2024-01-24 18:23:46浏览次数:19  
标签:right return self start 刷题 link 贪心 Leetcode left

738:单调递增

链接:738. 单调递增的数字 - 力扣(LeetCode)

嘶~介个介个恶心心,从后往前遍历,前一个数比当前数大,前一个数-1,当前数变为9

需要注意的是,保证每个9后面全是9

100,第一轮遍历完时90T_T

 1 class Solution:
 2     def monotoneIncreasingDigits(self, n: int) -> int:
 3         if(n<10):   return n
 4         nums=[]
 5         tmp=n
 6         while tmp:
 7             nums.insert(0,tmp%10)
 8             tmp=tmp//10
 9         lens=len(nums)
10         i=lens-1
11         flage=False
12         while i>0:
13             if(nums[i-1]>nums[i]):
14                 nums[i-1]-=1
15                 nums[i]=9
16                 flage=True
17             i-=1
18         n=0
19         start=False
20         for i in range(lens):
21             if(flage and nums[i]==9):
22                 start=True
23             if(start):
24                 n=n*10+9
25             else:
26                 n=n*10+nums[i]
27         return n
monotoneIncreasingDigits

968:监控二叉树

链接:968. 监控二叉树 - 力扣(LeetCode)

吐了,真的吐了,从未见过如次厚颜无耻之题

先是统计了每层节点个数,想按层安装,但是会出现子层节点少于父层节点,若在子层节点安装,还需要计算父-父层,跳不出来了T_T

然后迭代,后序遍历T_T左在前,左空的时候直接安到根上,右丢了,右在前,左空了,又跑根上了

最后递归,俩孩子有一个没有被覆盖,父就要安,俩孩子都被覆盖到了,父歇着就好,等待后续判断要不要安,其他情况父被覆盖,最后返回根的左右俩孩子状态,俩孩子都是0,根安T_T我真的已经哭死了

 1 # Definition for a binary tree node.
 2 # class TreeNode:
 3 #     def __init__(self, val=0, left=None, right=None):
 4 #         self.val = val
 5 #         self.left = left
 6 #         self.right = right
 7 class Solution:
 8     def minCameraCover(self, root: Optional[TreeNode]) -> int:
 9         re=[0]
10         if(self.help(root,re)==0):  re[0]+=1
11         return re[0]
12 
13     def help(self,root,re):
14         if(not root):   return 2
15         left=self.help(root.left,re)
16         right=self.help(root.right,re)
17         #左右都有覆盖,当前什么都不做
18         if(left==2 and right==2):
19             return 0
20         #左右有一个没覆盖,自己有摄像头
21         elif(left==0 or right==0):
22             re[0]+=1
23             return 1
24         else:
25             #左右有一个摄像头,自己被覆盖
26             return 2
minCameraCover

不行了,需要换个脑子了,开始双指针之旅

167:两个数之和

链接:167. 两数之和 II - 输入有序数组 - 力扣(LeetCode)

(⊙﹏⊙)就两头开始加

 1 class Solution:
 2     def twoSum(self, numbers: List[int], target: int) -> List[int]:
 3         if(not numbers):    return numbers
 4         left,right=0,len(numbers)-1
 5         while True:
 6             if(left==right):    break
 7             if(numbers[left]+numbers[right]==target):   return [left+1,right+1]
 8             elif(numbers[left]+numbers[right]>target):  right-=1
 9             else:   left+=1
10         return []
11 
12             
twoSum

142:环形链表

链接:142. 环形链表 II - 力扣(LeetCode)

俩个指针,快的每次走两步,慢的每次走一步,链表有环,快的会再比慢的多走n个环的距离时相遇(跑步套圈)

找环的入口:从头再来一个指针3,也是每次都走一步,指针3和慢指针相遇的时候,比慢指针少走了一个环,相遇位置就是环口

 1 # Definition for singly-linked list.
 2 # class ListNode:
 3 #     def __init__(self, x):
 4 #         self.val = x
 5 #         self.next = None
 6 
 7 class Solution:
 8     def detectCycle(self, head: Optional[ListNode]) -> Optional[ListNode]:
 9         if(not head):   return None
10         start,link=head,head
11         while link and link.next:
12             link=link.next.next
13             start=start.next
14             if(link==start):
15                 start=head
16                 while start!=link:
17                     start=start.next
18                     link=link.next
19                 return link
20         return None
21 
22     
detectCycle

76:最小覆盖字串

链接:76. 最小覆盖子串 - 力扣(LeetCode)

待优化,一坨什么玩意

 1 class Solution(object):
 2     def minWindow(self,s,t):
 3         if(not s):  return ""
 4         lent=len(t)
 5         lens=len(s)
 6         if(lens<lent):  return ""
 7         flage={x:t.count(x) for x in t}
 8         left,right,minleft,minright=0,0,-1,lens
 9         while left<lens:
10             if(lent!=0):
11                 strl=s[left]
12                 if(strl not in t):  
13                     left+=1
14                     continue
15                 if(right<lens):
16                     strs=s[right]
17                     right+=1
18                     if(strs in t):
19                         flage[strs]-=1
20                         if(flage[strs]>=0): lent-=1
21                 else:
22                     if(lent>0):   left+=1
23             else:
24                 strl=s[left]
25                 if(strl not in t):  
26                     left+=1
27                     continue
28                 if(right-left<minright-minleft):
29                     minleft=left
30                     minright=right
31                 while left<lens:
32                     strs=s[left]
33                     left+=1
34                     if(strs in t):
35                         flage[strs]+=1
36                         if(flage[strs]>0):  lent+=1
37                         break
38         if(minleft==-1):    return ""
39         return s[minleft:minright]
minWindow

 

标签:right,return,self,start,刷题,link,贪心,Leetcode,left
From: https://www.cnblogs.com/xiaoruru/p/17985467

相关文章

  • c++学习由浅入深刷题指南
    新手村任何一个伟大的目标,都有一个微不足道的开始。洛谷的第一个任务勇敢的迈出第一步,了解下语言和洛谷。跟着书本和老师走,不会难的。P1000P1001P1421P1425顺序与分支计算机的智能性开始得以体现,因为计算机能够根据不同的条件选择了。P1422P1085P1089P1909循环!......
  • 每日刷题 凯撒密码
    一.题目给定一个单词,请使用凯撒密码将这个单词加密。凯撒密码是一种替换加密的技术,单词中的所有字母都在字母表上向后偏移3位后被替换成密文。即a变成d,b变成e,…,w变成z,x变成a,y变成b,z变成c。二.题目要求1.输入要求输入一行,包含一个单词,单词中只包含一个小写英文字母,单词中的......
  • Leetcode刷题第二天-贪心
    655:非递减数列链接:665.非递减数列-力扣(LeetCode)直接找最大最小值进行替换不行,[1,5,4,6,7,8,9]最大最小值所处位置可能是非递减数列如果nums[i]>nums[i+1],当前这俩个数递减,修改谁,记录前一个数,比较前一个数和当前数的大小,前一个数大,小变大,后一个数大,大变小统计次数,出现两次......
  • templeetcode 22.括号生成
    leetcode22.括号生成第二十二题:括号生成1.回溯:publicList<String>generateParenthesis(intn){List<String>ans=newArrayList<String>();backtrack(ans,newStringBuilder(),0,0,n);returnans;}publicvoidbackt......
  • 【LeetCode 2494. 合并在同一个大厅重叠的活动】[MySQL 用户变量/Pandas]面向过程编程
    目录题目地址MySQL代码等效pandas代码题目地址https://leetcode.cn/problems/merge-overlapping-events-in-the-same-hall/MySQL代码#WriteyourMySQLquerystatementbelowwitht2as(select*#----只需要改动这里的逻辑,其他不要动。注意里面的语句是“顺序......
  • 【LeetCode1747. 应该被禁止的 Leetflex 账户】[MySQL 用户变量/Pandas]面向过程编程;
    目录题目地址MySQL代码等效pandas代码题目地址https://leetcode.cn/problems/leetflex-banned-accounts/description/MySQL代码witht1as(selectaccount_id,ip_address,loginastick,"login"asmytypefromLogInfounionallselectaccount_id,ip......
  • 【LeetCode 2701. 连续递增交易】[MySQL 用户变量/Pandas]面向过程编程得到严格递增连
    目录题目地址MySQL代码等效pandas代码题目地址https://leetcode.cn/problems/consecutive-transactions-with-increasing-amounts/MySQL代码#WriteyourMySQLquerystatementbelowwitht1as(select*#--------------------------只需要改动这里的逻辑,其他......
  • 【Leetcode1949. 坚定的友谊】使用MySQL在无向图中寻找{"CompleteTripartite", {1, 1,
    目录题目地址思路代码MySQL代码逐行翻译为Pandas代码等效Cypher查询(未验证)题目地址https://leetcode.cn/problems/strong-friendship/思路就是在无向图中寻找这个pattern:(*Mathematica*)GraphData[{"CompleteTripartite",{1,1,3}}]SQL写还是比较麻烦。更加复杂的查询还是......
  • 【Leetcode 2474. 购买量严格增加的客户】[MySQL 用户变量/Pandas]面向过程编程解决严
    目录题目地址MySQL代码等效pandas代码题目地址https://leetcode.cn/problems/customers-with-strictly-increasing-purchases/description/MySQL代码#WriteyourMySQLquerystatementbelowwitht1as(selectcustomer_id,year(order_date)asmy_year,sum(price)......
  • #yyds干货盘点# LeetCode程序员面试金典:反转字符串中的单词 III
    题目给定一个字符串s,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。 示例1:输入:s="Let'stakeLeetCodecontest"输出:"s'teLekatedoCteeLtsetnoc"示例2:输入:s="MrDing"输出:"rMgniD"代码实现classSolution{publicString......