首页 > 其他分享 >leetcode404周赛(1,2,3)

leetcode404周赛(1,2,3)

时间:2024-07-05 11:58:28浏览次数:15  
标签:blue 周赛 cnt sub int leetcode404 vector 序列

1.三角形的最大高度

题意:给你两个整数red和blue,需要用这些求组成一个三角形,相邻行颜色必须不同,求最大高度

思路:第一行放一个,第二行放两个第三行放三个,我们可以按奇数偶数行来计算总和,此时有两种情况,先蓝后红,先红后蓝,此时针对于第i行来说,如果

先蓝后红 此时对应奇偶行的蓝的数量不够或者红的数量不够,同时在先红后蓝这种情况下,红的数量或者蓝的数量也不够,两种情况都不能填充第i行,那么最大高度为第i-1行

ac代码:

class Solution {
public:
    int maxHeightOfTriangle(int red, int blue) {
         int cnt[2]={0,0};

         for(int i=1;i<=2000;i++){
               cnt[i%2]+=i;
           if((cnt[0]>red||cnt[1]>blue)&&(cnt[0]>blue||cnt[1]>red))
                return i-1;    
         }


   return 0;

    }
};

2.z找出有效子序列的最大长度I

题意:给一个整数数组,有效子序列的定义为:

(sub[0] + sub[1]) % 2 == (sub[1] + sub[2]) % 2 == ... == (sub[x - 2] + sub[x - 1]) % 2

返回数组的最长的有效子序列的长度

思路:模数是固定为2的,那么情况只有0,1,那么要使得相邻项数满足有效子序列的定义,则有四种情况,0000,1111,0101,1010,算出这四种情况的最大的长度取一个max

ac代码:

class Solution {
public:
    int maximumLength(vector<int>& nums) {
        for(int i=0;i<nums.size();i++)
            nums[i]%=2;
    int cnt1=0,cnt2=0,cnt3=0,cnt4=0;

      for(int i=0;i<nums.size();i++)
          if(nums[i]==0)   cnt1++;

         for(int i=0;i<nums.size();i++)
          if(nums[i]==1)   cnt2++;

        int ok=0;
           for(int i=0;i<nums.size();i++)
           if(!ok&&nums[i]==0)    cnt3++,ok=1;
           else if(ok&&nums[i]==1) cnt3++,ok=0;

                 ok=0;
           for(int i=0;i<nums.size();i++)
           if(!ok&&nums[i]==1)    cnt4++,ok=1;
           else if(ok&&nums[i]==0) cnt4++,ok=0;     
     int res=max(cnt1,cnt2);
     res=max(res,cnt3);
     res=max(res,cnt4);
     return res;   
   
    }
};

3.找出有效子序列的最大长度II

题意:和上一题一样,只是模数2换成了k

思路:通过这个式子(sub[i] + sub[i+1]) % k == (sub[i+1] + sub[i+2]) % k可以变形成为(sub[i] + sub[i+1])-(sub[i+1] + sub[i+2])%k==0即(sub[i]-sub[i+2])%k==0,因此sub[i]和sub[i+2]同余,只要寻找一个最长的子序列,满足子序列奇数项都相同,偶数项都相同即可满足条件,因此我们可以设一个函数f[y][x]表示当前已i为结尾的数后两位(肯定为一奇一偶),我们在这个后面添加nums[i],那么最后两项模k分别为x和y的子序列的长度会增加1

ac代码:

class Solution {
public:
    int maximumLength(vector<int>& nums, int k) {
        int ans = 0;
        vector<vector<int>> f(k, vector<int>(k));
        for (int x : nums) {
            x %= k;
            for (int y = 0; y < k; y++) {
                f[y][x] = f[x][y] + 1;
                ans = max(ans, f[y][x]);
            }
        }
        return ans;
    }
};

标签:blue,周赛,cnt,sub,int,leetcode404,vector,序列
From: https://blog.csdn.net/sgyjhhik/article/details/140204609

相关文章

  • (对结果分类讨论)牛客周赛 Round 1 C.游游的交换字符
    题意:思路:观察发现相邻元素不同的结果只有两种,要么是101010101...要么是010101010,因此我们可以对结果分类讨论。直接模拟算出两种情况最少需要操作多少次,再取min即可。需要注意的是,如果是奇数串,那么结果只有一种,数量多的一定要放两侧。code:#include<bits/stdc++.h>#includ......
  • 牛客周赛 Round 44
    A题每三张删除一张,n/3就是答案点击查看代码#include<bits/stdc++.h>#defineall(x)(x).begin(),(x).end()#definefifirst#definesesecondusingi64=longlong;usingpii=std::pair<int,int>;template<typenameT>std::vector<T>read(T&n......
  • 牛客周赛 Round 49 (D~F)
    嘤嘤不想求异或喵think:首先l和r的范围有1e18,我们能要到要么是二分(但这题显然和二分无关),所以我们尝试打表找规律.打表发现x是4的倍数,1~x的异或和应该是x,同理其他也是有规律的.#include<bits/stdc++.h>#definefifirst#definesesecond#defineintlonglongusin......
  • 牛客周赛 Round 49
    A题按题目输出即可#include<bits/stdc++.h>#defineall(x)(x).begin(),(x).end()#definefifirst#definesesecond#definelowbit(x)(x)&(-x)usingi64=longlong;usingpii=std::pair<int,int>;voidsolve(){i64a,b;std::cin>......
  • 「蓝桥·算法双周赛」第 3 场 算法季度赛
    1.全国科普行动日【算法赛】#include<iostream>usingnamespacestd;intmain(){cout<<"6.29";return0;}2.A%B【算法赛】#include<bits/stdc++.h>usingnamespacestd;usingi32=int32_t;usingi64=longlong;usingi128=__int1......
  • 牛客周赛49
    比赛链接:牛客周赛49赛时感受A思路    代码#include<bits/stdc++.h>usingnamespacestd;#definelllonglongconstintN=1e5+10;intmain(){lla,b;cin>>a>>b;cout<<a-b*11<<endl;return0;}B思路......
  • 牛客周赛 Round 47
    A、小红的葫芦水一篇代码实现#include<bits/stdc++.h>#ifdefLOCAL#include"algo/debug.h"#else#definedebug(...)42#endifintmain(){std::cin.tie(nullptr)->sync_with_stdio(false);intn=5;std::vector<int>a(n);fo......
  • 牛客周赛47 (待补F和思路)
    比赛链接:牛客周赛47赛时感受    又是一场思维题,应该只有EF有点算法,E需要使用快速幂和取余,F做不出,C卡了我一下,D写完了,E不写完一半又回来看C才做掉的,E也卡了很久虽然鸽巢原理想到了,但是没想到被卡在取余问题上,一开始没想出来,去做F然后做了半个小时发现做不掉,又回来在E上......
  • 牛客周赛 Round 47
    时刻多日没打竟然退步了 A.小红的葫芦思路:五个元素三个相同另外两个相同可以通过数组排序写也可以map等等方法很多Code:#include<bits/stdc++.h>usingnamespacestd;map<int,int>mp;intmain(){ios::sync_with_stdio(false);cin.tie(0);......
  • 116. 小欧的卡牌(卡码网周赛第十七期(23年oppo提前批B组笔试真题))
    116.小欧的卡牌(卡码网周赛第十七期(23年oppo提前批B组笔试真题))题目描述小欧有n张卡牌,第i张卡牌的正面写了个数字ai,背面写了个数字bi。小欧对于每张卡牌可以选择一面向上,她希望最终向上的数字之和为3的倍数。你能告诉小欧有多少方案吗?由于答案过大,请对10^9+7......