Week7-LeetCode

2923.找到冠军(简单)

法1:

class Solution:def findChampion(self, grid: List[List[int]]) -> int:Winner = 0n = len(grid)loser = [0 for _ in range(n)] for i in range(n):for j in range(n):if grid[i][j] == 1 and i != j:loser[j] = 1for index in range(n):if loser[index] == 0:return index

法2:

class Solution:def findChampion(self, grid: List[List[int]]) -> int:n = len(grid)for i, line in enumerate(grid):if sum(line) == n - 1:return i

22.括号生成(中等)

思路1→暴力法:
把所有可能的组合列出,去除不合格的可能。

class Solution:def generateParenthesis(self, n: int) -> List[str]:def generate(A):if len(A) == 2 * n:if valid(A):ans.append("".join(A))else:A.append('(')generate(A)A.pop()A.append(')')generate(A)A.pop()def valid(A):bal = 0for c in A:if c =='(':bal += 1else: bal -= 1if bal < 0:return Falsereturn bal == 0ans = []generate([])return ans

思路2→回溯法:
对思路1进行改进,我们可以只在序列仍然保持有效时才添加 ‘(’‘)’,而不是每次添加。我们可以通过跟踪到目前为止放置的左括号和右括号的数目来做到这一点。

class Solution:def generateParenthesis(self, n: int) -> List[str]:ans = []def backtrack(S, left, right):if len(S) == 2 * n:ans.append(''.join(S))return if left < n:S.append('(')backtrack(S, left + 1, right)S.pop()if right < left:S.append(')')backtrack(S, left, right + 1)S.pop()backtrack([], 0, 0)return ans

思路3→递归法:

class Solution:@lru_cache(None)def generateParenthesis(self, n: int) -> List[str]:if n == 0:return ['']ans = []for c in range(n):for left in self.generateParenthesis(c):for right in self.generateParenthesis(n - 1 - c):ans.append('({}){}'.format(left, right))return ans

23. 合并K个升序链表(困难)

思路:
把链表元素全部加到数组中,对数组排序,然后将数组元素组成链表。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def mergeKLists(self, lists: List[Optional[ListNode]]) -> Optional[ListNode]:nums = []head = ListNode(0)current = headfor li in lists:while li:nums.append(li.val)li = li.nextnums.sort()for num in nums:current.next = ListNode(num)current = current.nextreturn head.next

2924. 找到冠军 II (中等)

思路:
把所有节点的degree值设为0,意为没输过,如果遍历到一个节点没输过,且当前没有冠军节点,那么这个节点就是冠军,否则就是没有冠军。

class Solution:def findChampion(self, n: int, edges: List[List[int]]) -> int:degree = [0] * n for x, y in edges:degree[y] += 1champion = -1for i, d in enumerate(degree):if d == 0:if champion == -1:champion = ielse:return -1return champion

24.两两交换链表中的节点 (中等)

关键思路:
需要额外的节点来记录prev, cur, temp, next

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:if head == None or head.next == None:return headtemp = ListNode(0)next_one = ListNode(0)prev = ListNode(0)newhead = ListNode(0)newhead.next = headprev = newheadcur = headwhile cur != None and cur.next != None:next_one = cur.next.nexttemp = cur.nextcur.next = temp.nexttemp.next = curprev.next = tempprev = curcur = next_onereturn newhead.next

25. K 个一组翻转链表(困难)

关键思路:
分为两个函数去实现:
函数1:把K个链表全部倒转,需要四个辅助指针。
函数2:找到K个链表,把K个链表取下再装回,需要四个辅助指针。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def reverse(self, head:ListNode, tail:ListNode):prev = tail.nextp = headwhile prev != tail:nex = p.nextp.next = prevprev = pp = nexreturn tail, head   def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:hair = ListNode(0)hair.next = headpre = hairwhile head:tail = pre# 查看剩余部分长度是否大于等于 kfor i in range(k):tail = tail.nextif not tail:return hair.nextnex = tail.nexthead, tail = self.reverse(head, tail)# 把子链表重新接回原链表pre.next = headtail.next = nexpre = tailhead = tail.nextreturn hair.next

26.删除有序数组中的重复项(简单)

class Solution:def removeDuplicates(self, nums: List[int]) -> int:n = len(nums)index = 0for i in range(1, n):if nums[i] != nums[index]:index += 1nums[index] = nums[i]return index + 1

27. 移除元素 (简单)

class Solution:def removeElement(self, nums: List[int], val: int) -> int:index = 0for i in range(len(nums)):if nums[i] != val:nums[index] = nums[i]index += 1return index

28. 找出字符串中第一个匹配项的下标 (简单)

class Solution:def strStr(self, haystack: str, needle: str) -> int:h = len(haystack)n = len(needle)i = 0index = 0while i <= h - n:for j in range(n):if haystack[i + j] == needle[j]:index += 1if index == n:return iindex = 0i += 1return -1

29. 两数相除 (中等)

关键思路:
为方便运算,将除数和被除数的符号统一;又为了不溢出,故将除数和被除数变为负数。
同样,在运算过程中为了避免溢出,把 A+B < C 的比较换为 A < C - B

class Solution:def divide(self, dividend: int, divisor: int) -> int:INT_MIN, INT_MAX = -2**31, 2 ** 31 - 1if dividend == INT_MIN:if divisor == 1:return INT_MINif divisor == -1:return INT_MAXif divisor == INT_MIN:return 1 if dividend == INT_MIN else 0if dividend == 0:return 0rev = Falseif dividend > 0:dividend = -dividendrev = not revif divisor > 0 :divisor = -divisorrev = not revdef quickAdd(y:int, z:int, x:int) -> bool:result, add = 0, ywhile z > 0:if (z & 1) == 1:if result < x - add:return Falseresult += addif z != 1:if add < x - add:return Falseadd += add  z >>= 1return Trueleft, right, ans = 1, INT_MAX, 0while left <= right:# 注意溢出,并且不能使用除法mid = left + ((right - left) >> 1)check = quickAdd(divisor, mid, dividend)if check:ans = mid# 注意溢出if mid == INT_MAX:breakleft = mid + 1else:right = mid - 1return -ans if rev else ans

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/1241.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu 微调训练ChatGLM3大语言模型

Ubuntu 微调训练ChatGLM3大语言模型 LLaMA Factory 的 LoRA 微调提供了 3.7 倍的加速比&#xff0c;同时在广告文案生成任务上取得了更高的 Rouge 分数。结合 4 比特量化技术&#xff0c;LLaMA Factory 的 QLoRA 微调进一步降低了 GPU 显存消耗。 https://github.com/hiyouga…

累加(C语言)

一、题目&#xff1b; 二、N-S流程图&#xff1b; 三、运行结果&#xff1b; 四、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int i 0;int j 0;int n 5;int result 0;int sum 0;//运算&#…

在 AOSP / Android 类原生系统上解决 Wifi 连接警告问题

自 Android 5.0 起&#xff0c;谷歌引入了Captive Portal的机制&#xff0c;用于检测 WiFi网络认证是否正常。由于众所周知的原因&#xff0c;我们在中国大陆并无法访问谷歌的网络&#xff0c;这在某些情况下会导致一些问题&#xff0c;例如&#xff1a;在中国大陆使用一些类原…

数据挖掘与数据分析

目录 数据挖掘与数据分析 一&#xff0e;数据的本质 二&#xff0e;什么是数据挖掘和数据分析 三&#xff0e;数据挖掘和数据分析有什么区别 案例及应用 1. 基于分类模型的案例 2. 基于预测模型的案例 3. 基于关联分析的案例 4. 基于聚类分析的案例 5. 基于异常值分析…

牛客-小乐乐与欧几里得

目录 题目 描述 输入描述&#xff1a; 输出描述&#xff1a; 示例1 示例2 解题 题目 描述 小乐乐最近在课上学习了如何求两个正整数的最大公约数与最小公倍数&#xff0c;但是他竟然不会求两个正整数的最大公约数与最小公倍数之和&#xff0c;请你帮助他解决这个问题。 …

进程控制第二弹(进程程序替换)

文章目录 代码现象基本原理多进程版本实例基本原理 使用所有的替换方法&#xff0c;并且认识函数的参数含义execlexecvexeclp、execvpexecvpe 总结 代码现象 #include<stdio.h> #include<unistd.h> int main() { printf("testexec begin! ...\…

数据安全全面防护

what 通过采用各种有效技术和管理措施来保护网络系统的正常运行&#xff0c;从而保证数据的可用性&#xff0c;机密性&#xff0c;完整性。 ---网络安全防护体系建设三同步--规划 建设 运行 数据安全的三大基本特征 可用性 数据在需要时可用且可访问&#xff0c;为实现可用…

学习JavaEE的日子 Day39 注解,反射

Day39 注解 1.什么是注解 理解&#xff1a;给程序员和程序解释代码信息 2.注解与注释的区别 注释&#xff1a;对程序员解释代码信息 注解&#xff1a;对程序和程序员解释代码信息 3.注解的所用 可以作用于包、类、方法、属性上&#xff0c;给他们添加额外的信息&#xff0c;可…

Fastadmin解决异步高并发大并发阻塞超时问题

官方连接​​​​​​https://guzzle-cn.readthedocs.io/zh_CN/latest/quickstart.html?highlightgetasync 使用guzzle 实现&#xff0c;需要先引用。安装请自行解决。 use GuzzleHttp\Client; use GuzzleHttp\Promise; /*** 异步高并发请求*/public function asyncRequests…

Android自定义类-写字板

目录 1. 属性文件 res/values/attrs.xml 2. 自定义控件类文件 MyClipbroad.class 3. XML布局文件中的使用 4. Java文件中的使用 该写字板可设置画笔颜色、画笔宽度、画布背景&#xff0c;具有导出图像、清空画布功能&#xff0c;可与OnTouchListener配合达到触摸绘画的效果…

速盾:cdn都能防御哪些攻击?

CDN&#xff08;Content Delivery Network&#xff09;是一种分布式的服务器网络&#xff0c;通过将资源缓存到多个服务器节点上&#xff0c;在用户请求资源时将其分发至最近的服务器节点&#xff0c;提供快速响应和高可用性。除了提供高速内容传输和优化用户体验之外&#xff…

算法课程笔记——STL键值对map

map当下标无限的数组 重点是对应关系&#xff0c;一般不修改compare 类比set 没有lowerbound&#xff0c;因为遍历是无序的 ; map不能用sort函数排序 但可用vector转化为map使用 std::set<std::pair<TKEY, mutable TVAL> > ≈ std::map<TKEY, TVAL>

使用 Cucumber框架进行BDD测试的一些项目

BehatMage 项目地址: https://github.com/MageTest/BehatMage 不过该项目在GitHub中有超过10年没有更新了。 项目介绍&#xff1a; BehatMage项目介绍 BehatMage是一个基于Behat的Magento测试框架&#xff0c;用于自动化测试Magento电子商务平台的功能和性能。Behat是一个行…

什么是认知负荷?

认知负荷&#xff08;Cognitive Load&#xff09;是心理学中的一个概念&#xff0c;它描述了一个人在特定时间内处理信息和进行思考所需耗费的认知资源的量。这个概念是由教育心理学家John Sweller在1988年提出的&#xff0c;主要用于描述学习过程中的认知需求。 认知负荷通常…

【剪映专业版】13快速为视频配好音:清晰、无噪声、对齐

视频课程&#xff1a;B站有知公开课【剪映电脑版教程】 使用场景&#xff1a;视频无声音或者视频有声音但是需要更改声音 时间指示器在哪里&#xff0c;就从哪里开始 红色按钮&#xff1a;开始录音 声音波纹&#xff1a;蓝色最佳&#xff0c;黄色或红色声音太大&#xff0c;…

23种设计模式之创建型模式篇

一、创建型模式 这类模式主要关注对象的创建过程。它们试图在创建对象的同时&#xff0c;将对象的创建和使用分离&#xff0c;以达到更高的灵活性和可扩展性. 包括: 工厂方法模式&#xff08;Factory Method&#xff09;抽象工厂模式&#xff08;Abstract Factory&#xff0…

C# 反射基础

1 在.NET中程序集是什么&#xff1f; 程序集&#xff08;Assembly&#xff09;以可执行文件(.exe)或动态链接库文件(.dll)的形式存在&#xff0c;是.NET应用程序构建的基本单元。程序集可用于部署、版本控制和设置安全权限等。 2.程序集的有哪些部分组成&#xff1f; 程序集…

Unity UGUI透明区域点击无效

是这样的&#xff0c;我有一张图&#xff0c;客户给的是1920*1080&#xff0c;但只有中间部分是按钮&#xff0c;是有效像素。为了让空白区域点击无效。需要设置如下 并且加上下面这句 this.GetComponent<Image>().alphaHitTestMinimumThreshold 0.1f;

tomcat中Pipeline-Valve解析

tomcat中用到Pipeline-Value有二种方式&#xff0c;一种是管道/阀门&#xff0c;另一种是过滤器链/过滤器。 管道/阀门过滤器链/过滤器管道&#xff08;Pipeline&#xff09;过滤器链&#xff08;FilterChain&#xff09;阀门&#xff08;Valve&#xff09;过滤器&#xff08;…

python学习笔记B-08:序列结构之列表--列表的遍历操作

列表的遍历方法主要有三种&#xff0c;使用方法和特点如下&#xff1a; lst list("hello") print("第一种遍历方式&#xff0c;使用for循环&#xff0c;循环变量item直接就是lst中的元素") for item in lst:print(item,end"\t")print("\n…