金融投资风险公司网站源码,石家庄企业招聘信息网,论网站建设的重要性,产品网页设计教程文章目录1. 比赛结果2. 题目1. LeetCode 5432. 去掉最低工资和最高工资后的工资平均值 easy2. LeetCode 5433. n 的第 k 个因子 medium3. LeetCode 5434. 删掉一个元素以后全为 1 的最长子数组 medium4. LeetCode 5435. 并行课程 II hard1. 比赛结果
做出来了3道题。第三题卡了…
文章目录1. 比赛结果2. 题目1. LeetCode 5432. 去掉最低工资和最高工资后的工资平均值 easy2. LeetCode 5433. n 的第 k 个因子 medium3. LeetCode 5434. 删掉一个元素以后全为 1 的最长子数组 medium4. LeetCode 5435. 并行课程 II hard1. 比赛结果
做出来了3道题。第三题卡了一会第四题知道拓扑排序后面就没有思路了。继续加油
全国排名890 / 225939.4%全球排名 3407 / 793342.9%
2. 题目
1. LeetCode 5432. 去掉最低工资和最高工资后的工资平均值 easy
题目链接
给你一个整数数组 salary 数组里每个数都是 唯一 的其中 salary[i] 是第 i 个员工的工资。
请你返回去掉最低工资和最高工资以后剩下员工工资的平均值。
示例 1
输入salary [4000,3000,1000,2000]
输出2500.00000
解释最低工资和最高工资分别是 1000 和 4000 。
去掉最低工资和最高工资以后的平均工资是 (20003000)/2 2500示例 2
输入salary [1000,2000,3000]
输出2000.00000
解释最低工资和最高工资分别是 1000 和 3000 。
去掉最低工资和最高工资以后的平均工资是 (2000)/1 2000示例 3
输入salary [6000,5000,4000,3000,2000,1000]
输出3500.00000示例 4
输入salary [8000,9000,2000,3000,6000,1000]
输出4750.00000提示
3 salary.length 100
10^3 salary[i] 10^6
salary[i] 是唯一的。
与真实值误差在 10^-5 以内的结果都将视为正确答案。解题
class Solution {//C
public:double average(vectorint salary) {int MAX *max_element(salary.begin(), salary.end());int MIN *min_element(salary.begin(), salary.end());int sum accumulate(salary.begin(), salary.end(),0);return (sum-MAX-MIN)/double(salary.size()-2);}
};class Solution:# py3def average(self, salary: List[int]) - float:salary.sort()s sum(salary)-salary[0]-salary[-1]return s/(len(salary)-2)2. LeetCode 5433. n 的第 k 个因子 medium
题目链接 给你两个正整数 n 和 k 。
如果正整数 i 满足 n % i 0 那么我们就说正整数 i 是整数 n 的因子。
考虑整数 n 的所有因子将它们 升序排列 。 请你返回第 k 个因子。如果 n 的因子数少于 k 请你返回 -1 。
示例 1
输入n 12, k 3
输出3
解释因子列表包括 [1, 2, 3, 4, 6, 12]第 3 个因子是 3 。示例 2
输入n 7, k 2
输出7
解释因子列表包括 [1, 7] 第 2 个因子是 7 。示例 3
输入n 4, k 4
输出-1
解释因子列表包括 [1, 2, 4] 只有 3 个因子所以我们应该返回 -1 。示例 4
输入n 1, k 1
输出1
解释因子列表包括 [1] 第 1 个因子为 1 。示例 5
输入n 1000, k 3
输出4
解释因子列表包括 [1, 2, 4, 5, 8, 10, 20, 25, 40, 50,
100, 125, 200, 250, 500, 1000] 。提示
1 k n 1000解题
class Solution {//C
public:int kthFactor(int n, int k) {setint s;for(int i 1; i n; i) {if(n%i0)s.insert(i);}if(s.size() k)return -1;auto it s.begin();while(--k it ! s.end()){it;}return *it;}
};or
因为是有序的直接遍历到第k个返回即可
class Solution { //C
public:int kthFactor(int n, int k) {for(int i 1; i n; i){if(n%i0){k--;if(k0)return i;}}return -1;}
};class Solution:# py3def kthFactor(self, n: int, k: int) - int:s set()for i in range(1,n1):if n%i 0:s.add(i)if len(s) k:return -1l list(s)l.sort()return l[k-1]3. LeetCode 5434. 删掉一个元素以后全为 1 的最长子数组 medium
题目链接 给你一个二进制数组 nums 你需要从中删掉一个元素。
请你在删掉元素的结果数组中返回最长的且只包含 1 的非空子数组的长度。
如果不存在这样的子数组请返回 0 。
示例 1
输入nums [1,1,0,1]
输出3
解释删掉位置 2 的数后[1,1,1] 包含 3 个 1 。示例 2
输入nums [0,1,1,1,0,1,1,0,1]
输出5
解释删掉位置 4 的数字后
[0,1,1,1,1,1,0,1] 的最长全 1 子数组为 [1,1,1,1,1] 。示例 3
输入nums [1,1,1]
输出2
解释你必须要删除一个元素。示例 4
输入nums [1,1,0,0,1,1,1,0,1]
输出4示例 5
输入nums [0,0,0]
输出0提示
1 nums.length 10^5
nums[i] 要么是 0 要么是 1 。解题
类似题目LeetCode 1004. 最大连续1的个数 III滑动窗口
比赛没想出滑动窗口很差的代码如下记录所有的窗口再检查能否合并
class Solution {//C
public:int longestSubarray(vectorint nums) {int maxlen 0;vectorvectorint lr;//记录所有区间int l -1, r -1;for(int i 0; i nums.size(); i) {if(nums[i]l-1)l i;if(l ! -1 nums[i]0 r-1)r i-1;if(nums[i] i nums.size()-1)r nums.size()-1;if(l!-1 r!-1){lr.push_back({l,r});l r -1;}}if(lr.size()0)return 0;if(lr.size()1){if(lr[0][0]!0 || lr[0][1]!nums.size()-1)return lr[0][1]-lr[0][0]1;elsereturn nums.size()-1;}maxlen max(maxlen, lr[0][1]-lr[0][0]1);for(int i 0,j; i lr.size()-1; i){j i1;//判断相邻的两个区间能否合并if(lr[i][1]2lr[j][0])maxlen max(maxlen, lr[j][1]-lr[i][0]);elsemaxlen max(maxlen, lr[j][1]-lr[j][0]1);}return maxlen;}
};class Solution:# py3def longestSubarray(self, nums: List[int]) - int:maxlen 0lr []l, r -1, -1for i in range(len(nums)):if nums[i] and l-1:l iif l ! -1 and nums[i]0 and r-1:r i-1if nums[i] and i len(nums)-1:r len(nums)-1if l ! -1 and r ! -1:lr.append([l,r])l, r -1, -1if len(lr)0:return 0if len(lr)1:if lr[0][0]!0 or lr[0][1]!len(nums)-1:return lr[0][1]-lr[0][0]1else:return len(nums)-1maxlen max(maxlen, lr[0][1]-lr[0][0]1)for i in range(len(lr)-1):j i1if lr[i][1]2lr[j][0]:maxlen max(maxlen, lr[j][1]-lr[i][0])else:maxlen max(maxlen, lr[j][1]-lr[j][0]1)return maxlen滑动窗口根据可以删除的0的个数k来收放窗口
class Solution { //C滑窗
public:int longestSubarray(vectorint nums) {int l 0, r 0, maxlen 0, k1;while(r nums.size()){if(nums[r]0)k--;//可以删除的0的个数while(k 0){if(nums[l]0)k;}maxlen max(maxlen, r-l-1);}return maxlen;}
};4. LeetCode 5435. 并行课程 II hard
题目链接 给你一个整数 n 表示某所大学里课程的数目编号为 1 到 n 数组 dependencies 中 dependencies[i] [xi, yi] 表示一个先修课的关系也就是课程 xi 必须在课程 yi 之前上。同时你还有一个整数 k 。
在一个学期中你 最多 可以同时上 k 门课前提是这些课的先修课在之前的学期里已经上过了。
请你返回上完所有课最少需要多少个学期。题目保证一定存在一种上完所有课的方式。
示例 1
输入n 4, dependencies [[2,1],[3,1],[1,4]], k 2
输出3
解释上图展示了题目输入的图。
在第一个学期中我们可以上课程 2 和课程 3 。
然后第二个学期上课程 1 第三个学期上课程 4 。示例 2
输入n 5, dependencies [[2,1],[3,1],[4,1],[1,5]], k 2
输出4
解释上图展示了题目输入的图。一
个最优方案是第一学期上课程 2 和 3第二学期上课程 4
第三学期上课程 1 第四学期上课程 5 。示例 3
输入n 11, dependencies [], k 2
输出6提示
1 n 15
1 k n
0 dependencies.length n * (n-1) / 2
dependencies[i].length 2
1 xi, yi n
xi ! yi
所有先修关系都是不同的也就是说 dependencies[i] ! dependencies[j] 。
题目输入的图是个有向无环图。解题
待补