第 363 场 LeetCode 周赛题解

2023-09-17 12:21:36

A 计算 K 置位下标对应元素的和

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

模拟

class Solution {
public:
    int pop_cnt(int x) {//求x的二进制表示中的1的位数
        int res = 0;
        for (; x; x >>= 1)
            if (x & 1)
                res++;
        return res;
    }

    int sumIndicesWithKSetBits(vector<int> &nums, int k) {
        int res = 0;
        for (int i = 0; i < nums.size(); i++)
            if (pop_cnt(i) == k)
                res += nums[i];
        return res;
    }
};

B 让所有学生保持开心的分组方法数

在这里插入图片描述

排序+枚举:首先对数组排序,设选出的学生的元素集合为 { x i } \{x_i\} {xi},未选的学生的元素集合为 { y i } \{y_i\} {yi},则有 m a x { x i } < ∣ { x i } ∣ < m i n { y i } max\{ x_i \} < |\{x_i\}| < min\{ y_i \} max{xi}<{xi}<min{yi},所有若存在选择方案,则选出学生一定是数组的一个前缀,且未选的学生是数组剩余的后缀,枚举可能的前后缀划分情况。

class Solution {
public:
    int countWays(vector<int> &nums) {
        sort(nums.begin(), nums.end());
        int n = nums.size();
        int res = 0;
        if (nums[n - 1] < n)//后缀为空
            res++;
        if (nums[0] > 0)//前缀为空
            res++;
        for (int i = 0; i < n - 1; i++) {//枚举前缀nums[0,i]
            if (nums[i] < i + 1 && nums[i + 1] > i + 1)
                res++;
        }
        return res;
    }
};

C 最大合金数

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

二分:因为所有合金都需要由同一台机器制造,所有枚举各台机器,二分查找能制造的最大合金数

class Solution {
public:
    using ll = long long;

    int maxNumberOfAlloys(int n, int k, int budget, vector<vector<int>> &composition, vector<int> &stock, vector<int> &cost) {
        int res = 0;
        for (auto &li: composition) {
            int l = 0, r = 3e8;
            while (l < r) {
                int mid = (l + r + 1) / 2;
                ll tmp = 0;
                for (int i = 0; i < n && tmp <= budget; i++) {
                    if (1LL * mid * li[i] - stock[i] > 0)
                        tmp +=(1LL * mid * li[i] - stock[i]) * cost[i];
                }
                if (tmp <= budget)
                    l = mid;
                else
                    r = mid - 1;
            }
            res = max(res, l);
        }
        return res;
    }
};

D 完全子集的最大元素和

在这里插入图片描述

质因数分解+哈希: 一组数字中每对元素的乘积都是一个完全平方数当且仅当数组中每个元素的奇数次质因子的集合相同 (例: 12 = 2 2 × 3 1 12=2^2\times 3^1 12=22×31 75 = 3 1 × 5 2 75=3^1\times 5^2 75=31×52,它们的奇数次质因子的集合都为 { 3 } \{3\} {3}),枚举元素同时更新奇数次质因子的集合对应的元素和。

class Solution {
public:
    using ll = long long;
    long long maximumSum(vector<int> &nums) {
        map<vector<int>, ll> s;
        ll res = 0;
        for (int i = 1; i <= nums.size(); i++) {
            int cur = i;
            vector<int> t;//cur的奇数次质因子的集合
            for (int f = 2; f * f <= cur; f++)//质因数分解
                if (cur % f == 0) {
                    int cnt_f = 0;
                    while (cur % f == 0) {
                        cur /= f;
                        cnt_f++;
                    }
                    if (cnt_f & 1)//f是奇数次质因子
                        t.push_back(f);
                }
            if (cur != 1) {
                t.push_back(cur);
            }
            s[t] += nums[i - 1];//更新元素和
        }
        res = 0;
        for (auto &[_, si]: s)
            res = max(res, si);
        return res;
    }
};

更多推荐

程序员必掌握的算法系列之动态规划算法

一:引言动态规划是一种重要的算法思想,其在程序员的日常工作中经常被使用到。它可以解决许多实际问题,如最短路径、最大子序列和等等。掌握动态规划算法不仅能提高程序员的编程能力,还可以优化算法的时间复杂度和空间复杂度。因此,作为程序员,必须深入学习和应用动态规划算法。二:动态规划算法介绍动态规划是一种将复杂问题分解成简单子问

【C++】C++ 语言对 C 语言的加强 ③ ( 类型检查增强 - 所有函数和变量必须有类型 | 新增 bool 类型 - bool 类型简介 )

文章目录一、类型检查增强-所有函数和变量必须有类型1、C语言函数类型-函数参数与返回值类型可以不确定2、C++语言函数类型-函数参数与返回值类型必须写明二、新增bool类型-bool类型简介一、类型检查增强-所有函数和变量必须有类型1、C语言函数类型-函数参数与返回值类型可以不确定在C语言中,函数的返回值类型在定义时可

使用GPT训练中秋古诗写作讲解

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。🎉欢迎👍点赞✍评论⭐收藏文章目录🚀一、背景🚀二、功能实现🔎2.1准备数据集🔎2.2安装环境和库🔎2.

typescript typeof操作符

tstypeof操作符简介在TypeScript中,typeof是一个操作符,用于获取一个值的类型。它可以与任何值一起使用,并返回一个描述该值类型的字符串。typeof操作符在TypeScript中的用法与JavaScript中的用法非常相似。如下,众所周知,在js中提供了typeof操作符用来在js中获取数据的类型t

多线程模式下的单例创建

Java单例DouleCheck方式/***doublecheck*如果没有synchronized和二次checkNull在单线程中没有任何问题。*synchronized保证只能有一个线程进入方法体中,其他的线程会进入等待队列。*[_instance=newJavaTest()]流程为:new写入缓存->更新到主存

Python进阶学习分享之循环设计

range()在Python中,for循环后的in跟随一个序列的话,循环每次使用的序列元素,而不是序列的下标。之前我们已经使用过range()来控制for循环。现在,我们继续开发range的功能,以实现下标对循环的控制:S='abcdefghijk'foriinrange(0,len(S),2):printS[i]在该

黑盒测试的优缺点(文档+视频讲解)

黑盒测试是一种软件测试方法,它基于对软件系统整体的分析和测试。相比白盒测试,黑盒测试更注重测试的结果和表现,而不是关注代码内部的实现和问题。在本文中,我们将探讨黑盒测试的优点和缺点。同时,我也准备了一份软件测试视频教程(含接口、自动化、性能等),需要的可以直接在下方观看,或者直接关注VX公众号:互联网杂货铺,免费领取软

HarmonyOS应用开发Web组件基本属性应用和事件

一、Web组件概述Web组件用于在应用程序中显示Web页面内容,为开发者提供页面加载、页面交互、页面调试等能力。页面加载:Web组件提供基础的前端页面加载的能力,包括加载网络页面、本地页面、Html格式文本数据。页面交互:Web组件提供丰富的页面交互的方式,包括:设置前端页面深色模式,新窗口中加载页面,位置权限管理,C

cms之wordpress主题安装

WordPress主题安装教程的方法有两种,分为在线安装和上传安装,下面是主题详细安装方法的步骤。后台在线安装主题从后台的主题界面在线安装主题是最方便的WordPress主题安装方式。方法如下:1在WordPress后台,转到外观→主题2单击“添加”按钮以访问WordPress主题目录。3.继续寻找所需的主题。您可以浏

WPF样式

样式是组织和重用格式化选项的重要工具。不是使用重复的标记填充XAML,以便设置外边距、内边距、颜色以及字体等细节,而是创建一系列封装所有这些细节的样式,然后在需要之处通过属性来应用样式。样式基础样式是可应用与元素的属性值集合。WPF样式系统与HTML标记中的层叠样式表(CSS)标准担当类似的角色。与CSS类似,通过WP

强化学习从基础到进阶-案例与实践[4]:深度Q网络-DQN、double DQN、经验回放、rainbow、分布式DQN

【强化学习原理+项目专栏】必看系列:单智能体、多智能体算法原理+项目实战、相关技巧(调参、画图等、趣味项目实现、学术应用项目实现专栏详细介绍:【强化学习原理+项目专栏】必看系列:单智能体、多智能体算法原理+项目实战、相关技巧(调参、画图等、趣味项目实现、学术应用项目实现对于深度强化学习这块规划为:基础单智能算法教学(g

热文推荐