移动零-LeetCode
移动零 🎯 问题描述(来源于LeetCode) 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 💻 代码实现 1234567891011class Solution: def moveZeroes(self, nums: List[int]) -> None: """ Do not return anything, modify nums in-place instead. """ l=len(nums) for i in range(l-1): d=i+1 while nums[i]==0 and d<l: nums[i],nums[d]=nums[d],nums[i] d+=1 📊 性能分析 提交结果 运行时...
H指数-LeetCode
H指数 🎯 问题描述(来源于LeetCode) 给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义:h 代表“高引用次数” ,一名科研人员的 h 指数 是指他(她)至少发表了 h 篇论文,并且 至少 有 h 篇论文被引用次数大于等于 h 。如果 h 有多种可能的值,h 指数 是其中最大的那个。 💻 代码实现 12345678910111213141516171819class Solution: def hIndex(self, citations: List[int]) -> int: l=len(citations) nums=citations count=0 acount=0 h=0 nums.sort() for i in range(l+1): x=i count =i ...
学生们参加各科测试的次数-LeetCode
学生们参加各科测试的次数 🎯 问题描述(来源于LeetCode) 学生表: Students ±--------------±--------+ | Column Name | Type | ±--------------±--------+ | student_id | int | | student_name | varchar | ±--------------±--------+ 在 SQL 中,主键为 student_id(学生ID)。 该表内的每一行都记录有学校一名学生的信息。 科目表: Subjects ±-------------±--------+ | Column Name | Type | ±-------------±--------+ | subject_name | varchar | ±-------------±--------+ 在 SQL 中,主键为 subject_name(科目名称)。 每一行记录学校的一门科目名称。 考试表: Examinations ±-------------±--------+...
最小操作次数使数组元素相等-LeetCode
最小操作次数使数组元素相等 🎯 问题描述(来源于LeetCode) 给你一个长度为 n 的整数数组,每次操作将会使 n - 1 个元素增加 1 。返回让数组所有元素相等的最小操作次数。 💻 代码实现 初始思路 123456789101112class Solution: def minMoves(self, nums: List[int]) -> int: l=len(nums) acount=0 d=max(nums)-min(nums) while d!=0: d=max(nums)-min(nums) nums.sort() for i in range(l-1): nums[i]+=d acount+=d return acount 优化后 123456789class Solution: def minMoves(self, nums: List[int]) -> int: l=len(nums) acount=0 d=min...
至少有5名直接下属的经理-LeetCode
至少有5名直接下属的经理 🎯 问题描述(来源于LeetCode) 表: Employee ±------------±--------+ | Column Name | Type | ±------------±--------+ | id | int | | name | varchar | | department | varchar | | managerId | int | ±------------±--------+ id 是此表的主键(具有唯一值的列)。 该表的每一行表示雇员的名字、他们的部门和他们的经理的id。 如果managerId为空,则该员工没有经理。 没有员工会成为自己的管理者。 编写一个解决方案,找出至少有五个直接下属的经理。 以 任意顺序 返回结果表。 💻 代码实现 1234567# Write your MySQL query statement belowSELECT t2.nameFROM Employee t1JOIN Employee t2ON t1.managerId=t...
非递减数列-LeetCode
非递减数列 🎯 问题描述(来源于LeetCode) 给你一个长度为 n 的整数数组 nums ,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。 我们是这样定义一个非递减数列的: 对于数组中任意的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。 💻 代码实现 1234567891011121314class Solution: def checkPossibility(self, nums: List[int]) -> bool: l=len(nums) count=0 for i in range(1,l): if nums[i]<nums[i-1] : count+=1 if i == 1 or nums[i] >= nums[i - 2]: nums[i - 1] = nums[i] ...
顺序队列
顺序队列 基本概念 数据结构的三要素 逻辑结构 线性结构 存储结构 顺序存储 数据的运算 费曼理解 队列就是排队,先进来的就可以先出去 内部实现: 12345define MaxSize 10;typedef struct { ElemType data[MaxSize]; int front,rear;}SqQueue; 复杂度分析: 初始化 1234void InitQueue(SqQueue &Q){ Q.front=0; Q.rear=0;} 判断队列是否为空 123456bool QueueEmpty(SqQueue &Q){ if(Q.front==Q.rear) return true; else return false;} 入队 12345678bool EnQueue(SqQueue &Q,ElemType e){ //边界判断 if(Q.rear-Q.front==MaxSize{ return false; ...
找到数组中所有消失的数字
找到数组中所有消失的数字 🎯 问题描述(来源于LeetCode) 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。 💻 代码实现 12345678910111213class Solution: def findDisappearedNumbers(self, nums: List[int]) -> List[int]: mp=dict() l=len(nums) a=[] for i in range(1,l+1): mp[i]=0 for i in nums: mp[i]=i for i in range(1,l+1): if mp[i]==0: a.append(i) return a 📊 性能分析 提交结果 运行时间...
数组中重复的数据
数组中重复的数据 🎯 问题描述(来源于LeetCode) 给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 最多两次 。请你找出所有出现 两次 的整数,并以数组形式返回。 你必须设计并实现一个时间复杂度为 O(n) 且仅使用常量额外空间(不包括存储输出所需的空间)的算法解决此问题。 💻 代码实现 初始思路 1234567891011class Solution: def findDuplicates(self, nums: List[int]) -> List[int]: a=sorted(nums) ans=[] l=len(nums) x=a[0] for i in range(1,l): if a[i]==x: ans.append(x) x=a[i] return ans 但时间复杂度是O(Nlog(N))O(Nlog(N))O(...
缺失的第一个正数
缺失的第一个正数 🎯 问题描述(来源于LeetCode) 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 💻 代码实现 1234567891011class Solution: def firstMissingPositive(self, nums: List[int]) -> int: l=len(nums) for i in range(l): while 1<=nums[i]<=l and nums[i]!=nums[nums[i]-1]: j=nums[i]-1 nums[j],nums[i]=nums[i],nums[j] for i in range(l): if nums[i]!=i+1: return i+1 return l+1 📊 性能分...















