2021-11-2
题目
1.值相等的最小索引
2.超过经理的收入工
3.组合总和
4.找出临界值之间的最小和最大距离
题解
1.值相等的最小索引
本题就是一个循环加上一个除于就可以了!!!
2.超过经理的收入工
SQL需要把同一个表用两次,分别命名不同的名字,然后最后来用where找出大于经理的员工!
3.组合总和
本题就是一个经典的回溯加剪枝,这个真的是经典的不能在经典的一个题!!!
我给大家看一下我画的图:
4.找出临界值之间的最小和最大距离
本题是上周周赛的第二题,一个链表的问题,但是我是把链表里面的数取出来放在数组里面来判断的,判断的两个条件,最后再来筛选!!!
代码
1.值相等的最小索引
class Solution: def smallestEqual(self, nums: List[int]) -> int: res=[] for index , i in enumerate(nums): if index % 10 == nums[index]: res.append(index) return min(res) if len(res) else -1
2.超过经理的收入工
SELECT a.Name as 'Employee' FROM Employee AS a, Employee AS b WHERE a.ManagerId = b.Id AND a.Salary > b.Salary;
3.组合总和
class Solution: def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]: res = [] n = len(candidates) def trace(res,begin,end,path,tag): if tag < 0: return if tag == 0: res.append(path) return for i in range(begin,end): trace(res,i,end,path+[candidates[i]],tag - candidates[i]) if n == 0: return [] trace(res,0,n,[],target) return res
4.找出临界值之间的最小和最大距离
class Solution: def nodesBetweenCriticalPoints(self, head: Optional[ListNode]) -> List[int]: nums = [] p = head while p: nums.append(p.val) p = p.next n = len(nums) a = [] for i in range(1,n-1): if nums[i - 1] > nums[i] < nums[i + 1]: a.append(i) elif nums[i - 1] < nums[i] > nums[i + 1]: a.append(i) if len(a) <2: return [-1,-1] max_ = a[-1] - a[0] min_ = float('inf') for i in range(1, len(a)): min_ = min(min_, a[i] - a[i - 1]) return [min_,max_]