Re: [闲聊] 每日leetcode

楼主: enmeitiryous (enmeitiryous)   2024-08-02 11:19:25
2134. minimum swaps to group all 1 together II
要赶在开学前把75刷完了
题目:给你一个array nums,它是circular的(也就是nums[0] nums[n-1]实际是相连的)
其中nums[i]只会是0或著1,每一次operation我们可以把任一位置的0和1互换,求出最少
的swap数使的circualr array nums中的1全部group成一连续数列
思路:
由于swap可以是任一位置间互换,所以一个subsequence中0的数目就是需求的swap数
而这样一个subsequence的最大长度就是其中1的数量总和,为了要满足circular性质
实际操作可以在nums后接一个nums的duplicate扫过去纪录其中含最少0的subseq的
0的数目。
int minSwaps(vector<int>& nums) {
int n=nums.size();
int temp=0;
int tol=0;
for(int i=0;i<n;++i){
tol+=nums[i];
nums.push_back(nums[i]);
}
int new_n=nums.size();
for(int i=0;i<tol;++i){
temp+=nums[i];
}
//return temp;
int ans=tol-temp;
for(int i=0;i<new_n-tol;++i){
temp-=nums[i];
temp+=nums[tol+i];
if(tol-temp<ans){
ans=tol-temp;
}
}
return ans;
作者: Smallsh (Smallsh)   2023-08-02 11:19:00
大师
作者: sustainer123 (caster)   2024-08-02 11:20:00
大师

Links booklink

Contact Us: admin [ a t ] ucptt.com