日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 第 29 场双周赛(890/2259,前39.4%)

發(fā)布時間:2024/7/5 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 第 29 场双周赛(890/2259,前39.4%) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 1. 比賽結(jié)果
    • 2. 題目
      • 1. LeetCode 5432. 去掉最低工資和最高工資后的工資平均值 easy
      • 2. LeetCode 5433. n 的第 k 個因子 medium
      • 3. LeetCode 5434. 刪掉一個元素以后全為 1 的最長子數(shù)組 medium
      • 4. LeetCode 5435. 并行課程 II hard

1. 比賽結(jié)果

做出來了3道題。第三題卡了一會,第四題知道拓撲排序,后面就沒有思路了。繼續(xù)加油!

全國排名:890 / 2259,39.4%;全球排名: 3407 / 7933,42.9%

2. 題目

1. LeetCode 5432. 去掉最低工資和最高工資后的工資平均值 easy

題目鏈接

給你一個整數(shù)數(shù)組 salary ,數(shù)組里每個數(shù)都是 唯一 的,其中 salary[i] 是第 i 個員工的工資。

請你返回去掉最低工資和最高工資以后,剩下員工工資的平均值

示例 1: 輸入:salary = [4000,3000,1000,2000] 輸出:2500.00000 解釋:最低工資和最高工資分別是 10004000 。 去掉最低工資和最高工資以后的平均工資是 (2000+3000)/2= 2500示例 2: 輸入:salary = [1000,2000,3000] 輸出:2000.00000 解釋:最低工資和最高工資分別是 10003000 。 去掉最低工資和最高工資以后的平均工資是 (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 以內(nèi)的結(jié)果都將視為正確答案。

解題:

class Solution {//C++ public:double average(vector<int>& 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

題目鏈接
給你兩個正整數(shù) n 和 k 。

如果正整數(shù) i 滿足 n % i == 0 ,那么我們就說正整數(shù) i 是整數(shù) n 的因子。

考慮整數(shù) n 的所有因子,將它們 升序排列
請你返回第 k 個因子。如果 n 的因子數(shù)少于 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) {set<int> s;for(int i = 1; i <= n; i++) {if(n%i==0)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%i==0){k--;if(k==0)return i;}}return -1;} }; class Solution:# py3def kthFactor(self, n: int, k: int) -> int:s = set()for i in range(1,n+1):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 的最長子數(shù)組 medium

題目鏈接
給你一個二進制數(shù)組 nums ,你需要從中刪掉一個元素。

請你在刪掉元素的結(jié)果數(shù)組中,返回最長的且只包含 1 的非空子數(shù)組的長度。

如果不存在這樣的子數(shù)組,請返回 0 。

示例 1: 輸入:nums = [1,1,0,1] 輸出:3 解釋:刪掉位置 2 的數(shù)后,[1,1,1] 包含 31 。示例 2: 輸入:nums = [0,1,1,1,0,1,1,0,1] 輸出:5 解釋:刪掉位置 4 的數(shù)字后, [0,1,1,1,1,1,0,1] 的最長全 1 子數(shù)組為 [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. 最大連續(xù)1的個數(shù) III(滑動窗口)

  • 比賽,沒想出滑動窗口,很差的代碼如下(記錄所有的窗口,再檢查能否合并)
class Solution {//C++ public:int longestSubarray(vector<int>& nums) {int maxlen = 0;vector<vector<int>> lr;//記錄所有區(qū)間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 = i+1;//判斷相鄰的兩個區(qū)間能否合并if(lr[i][1]+2==lr[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 = i+1if lr[i][1]+2==lr[j][0]:maxlen = max(maxlen, lr[j][1]-lr[i][0])else:maxlen = max(maxlen, lr[j][1]-lr[j][0]+1)return maxlen
  • 滑動窗口,根據(jù)可以刪除的0的個數(shù)k,來收放窗口
class Solution { //C++滑窗 public:int longestSubarray(vector<int>& nums) {int l = 0, r= 0, maxlen = 0, k=1;while(r < nums.size()){if(nums[r++]==0)k--;//可以刪除的0的個數(shù)while(k < 0){if(nums[l++]==0)k++;}maxlen = max(maxlen, r-l-1);}return maxlen;} };

4. LeetCode 5435. 并行課程 II hard

題目鏈接
給你一個整數(shù) n 表示某所大學里課程的數(shù)目,編號為 1 到 n ,數(shù)組 dependencies 中, dependencies[i] = [xi, yi] 表示一個先修課的關(guān)系,也就是課程 xi 必須在課程 yi 之前上。同時你還有一個整數(shù) k 。

在一個學期中,你 最多 可以同時上 k 門課,前提是這些課的先修課在之前的學期里已經(jīng)上過了。

請你返回上完所有課最少需要多少個學期。題目保證一定存在一種上完所有課的方式。

示例 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 解釋:上圖展示了題目輸入的圖。一 個最優(yōu)方案是:第一學期上課程 23,第二學期上課程 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 所有先修關(guān)系都是不同的,也就是說 dependencies[i] != dependencies[j] 。 題目輸入的圖是個有向無環(huán)圖。

解題:

待補

總結(jié)

以上是生活随笔為你收集整理的LeetCode 第 29 场双周赛(890/2259,前39.4%)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。