前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode周赛252场:时隔半年再来练习

LeetCode周赛252场:时隔半年再来练习

作者头像
韩旭051
发布2021-10-13 14:26:38
5260
发布2021-10-13 14:26:38
举报
文章被收录于专栏:刷题笔记刷题笔记

文章目录

先BB

有一段时间没有做算法题了,从准备春招开始就没有再 参加过 LeetCode 周赛 两三年前是能做对 两三道题,这些年过去了,还是这个水平 甚至还退步了不少。 仿佛还能想起刚开始接触 LeetCode 的时候 周赛还是用 iPad在 Java课上偷偷写 还只能做对 第一道签到题 第二题都不一定能写上。

在这里插入图片描述
在这里插入图片描述

那时候 参加的人比现在 少的多

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

还是自己太菜了,感觉身边的 同学 和 学弟学妹的水平 都是 AC 3 4 题了现在。

附上公司 休息室的工作环境

细心的同学会发现这个位置太晒了 我就换到了另一边

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

再说题

https://leetcode-cn.com/contest/weekly-contest-252/

在这里插入图片描述
在这里插入图片描述

1. 三除数

一个数 除数 肯定有 1 和 本身 第三个看看 2 到 sqrt(x) 有没有其他的

代码语言:javascript
复制
class Solution {
public:
    bool isThree(int n) {
        for(int i=2;i<=sqrt(n);i++){
            if(i==sqrt(n))return true;
            if(n%i==0)return false;
        }return false;
    }
};

没啥限制 其实硬写 也可以

代码语言:javascript
复制
class Solution {
public:
    bool isThree(int n) {
        int r = 0;
        for (int i = 1; i <= n; i += 1) if (n % i == 0) r += 1;
        return r == 3;
    }
};

2.你可以工作的最大周数

要求工作不能连续 所以 混着干活就行 1010101 这种 方式 最多的那个类型 比如是 1。最多就是 101 多1个就行 所以 拿到 全部数和 以及最大的数

代码语言:javascript
复制
class Solution {
public:
    long long numberOfWeeks(vector<int>& milestones) {
        long long int getmax = -1;
        long long int sum=0;
        for(int i=0;i<milestones.size();i++){
            if(milestones[i]>getmax)getmax=milestones[i];
            sum+=milestones[i];
        }
        if((sum-getmax)<getmax)return 2*(sum-getmax)+1;
        return sum;
    }
};

3.足够苹果最小花园长度

画图 找规律 我找了半天 分成 四份 算一份 *4

代码语言:javascript
复制
class Solution {
public:
    long long minimumPerimeter(long long neededApples) {
        long long ans = 0;
        while(++ans){
            long long int hang = (1+ans)*(ans)/2;
            long long int pre= (ans+1)*hang + ans*(1+ans)*ans/2;
            if(pre*4 >= neededApples)return ans*8;
        }
    }
};

在排行榜上 偷一份 别人的答案 看看

代码语言:javascript
复制
using LL = long long;
class Solution {
public:
    long long minimumPerimeter(long long neededApples) {
        LL L = 1, R = 1000000;
        while (L < R) {
            LL M = (L + R) >> 1;
            LL x = (1 + M) * M * (2 * M + 1) * 2;
            if (x < neededApples) L = M + 1;
            else R = M;
        }
        return L * 8;
    }
};

4. 统计特殊子序列的数量

我没坐上来 说一下错误思路 就是 整3个数组 分别 扫描一轮后 统计 这个位置 前面0 的数量 前面 1 的数量 和 后面2 的数量 分成两组 一个1 和 多个1 第一组。一个1 扫到1 之后看前面 多少 0 后面多少 2 然后 组合

第二组 两个1 作为1 的边界 看 第一个1前面几个0 第二个1后面几个 2 组合 两个1 之间的1 和 前面的0 后面的2

超时+内存溢出了 还是看 正常其他人的解法吧🤪

代码语言:javascript
复制
using LL = long long;
constexpr LL mod = 1'000'000'007;
class Solution {
public:
    int countSpecialSubsequences(vector<int>& nums) {
        LL A = 0, B = 0, C = 0;
        for (int x : nums) {
            if (x == 0) A = (A * 2 + 1) % mod;//A的组合个数有或无 2种 带不带前面的 + 现在的
            if (x == 1) B = (B * 2 + A) % mod;//B的组合个数 带这个B 和 不带这个B 和 A后 带 B
            if (x == 2) C = (C * 2 + B) % mod;//C的组合个数
        }return C;
    }
};
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-08-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 先BB
  • 再说题
    • 1. 三除数
      • 2.你可以工作的最大周数
        • 3.足够苹果最小花园长度
          • 4. 统计特殊子序列的数量
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档