【数据结构与算法 | 力扣篇】力扣每日一题575, 1103

devtools/2024/10/19 2:17:17/

1. 力扣575 : 分糖果

(1). 题

Alice 有 n 枚糖,其中第 i 枚糖的类型为 candyType[i] 。Alice 注意到她的体重正在增长,所以前去拜访了一位医生。

医生建议 Alice 要少摄入糖分,只吃掉她所有糖的 n / 2 即可(n 是一个偶数)。Alice 非常喜欢这些糖,她想要在遵循医生建议的情况下,尽可能吃到最多不同种类的糖。

给你一个长度为 n 的整数数组 candyType ,返回: Alice 在仅吃掉 n / 2 枚糖的情况下,可以吃到糖的 最多 种类数

示例 1:

输入:candyType = [1,1,2,2,3,3]
输出:3
解释:Alice 只能吃 6 / 2 = 3 枚糖,由于只有 3 种糖,她可以每种吃一枚。

示例 2:

输入:candyType = [1,1,2,3]
输出:2
解释:Alice 只能吃 4 / 2 = 2 枚糖,不管她选择吃的种类是 [1,2]、[1,3] 还是 [2,3],她只能吃到两种不同类的糖。

示例 3:

输入:candyType = [6,6,6,6]
输出:1
解释:Alice 只能吃 4 / 2 = 2 枚糖,尽管她能吃 2 枚,但只能吃到 1 种糖。

提示:

  • n == candyType.length
  • 2 <= n <= 104
  • n 是一个偶数
  • -105 <= candyType[i] <= 105

(2). 思路

直接使用HashSet来计算不重复的糖果数量,与总糖果数量的一半比较即可.

(3). 解

class Solution {public int distributeCandies(int[] candyType) {int n1 = (candyType.length) / 2;Set<Integer> hashset = new HashSet<>();for (int i = 0; i < candyType.length; i++) {hashset.add(candyType[i]);}int n2 = hashset.size();return n2 < n1 ? n2 : n1;}
}

2. 力扣1103 : 分糖果2

(1). 题

排排坐,分糖果。

我们买了一些糖果 candies,打算把它们分给排好队的 n = num_people 个小朋友。

给第一个小朋友 1 颗糖果,第二个小朋友 2 颗,依此类推,直到给最后一个小朋友 n 颗糖果。

然后,我们再回到队伍的起点,给第一个小朋友 n + 1 颗糖果,第二个小朋友 n + 2 颗,依此类推,直到给最后一个小朋友 2 * n 颗糖果。

重复上述过程(每次都比上一次多给出一颗糖果,当到达队伍终点后再次从队伍起点开始),直到我们分完所有的糖果。注意,就算我们手中的剩下糖果数不够(不比前一次发出的糖果多),这些糖果也会全部发给当前的小朋友。

返回一个长度为 num_people、元素之和为 candies 的数组,以表示糖果的最终分发情况(即 ans[i] 表示第 i 个小朋友分到的糖果数)。

示例 1:

输入:candies = 7, num_people = 4
输出:[1,2,3,1]
解释:
第一次,ans[0] += 1,数组变为 [1,0,0,0]。
第二次,ans[1] += 2,数组变为 [1,2,0,0]。
第三次,ans[2] += 3,数组变为 [1,2,3,0]。
第四次,ans[3] += 1(因为此时只剩下 1 颗糖果),最终数组变为 [1,2,3,1]。

示例 2:

输入:candies = 10, num_people = 3
输出:[5,2,3]
解释:
第一次,ans[0] += 1,数组变为 [1,0,0]。
第二次,ans[1] += 2,数组变为 [1,2,0]。
第三次,ans[2] += 3,数组变为 [1,2,3]。
第四次,ans[0] += 4,最终数组变为 [5,2,3]。

提示:

  • 1 <= candies <= 10^9
  • 1 <= num_people <= 1000

(2). 思路

还是比较简单的,只要sum>=i就循环,由于是先往cur中操作完,再更新cur.所以退出循环时,向cur位置加上sum即可.

重要的话是,重复上述过程,直到我们分完所有糖果,而且即使剩余糖果不够,也会全部发完.

(3). 解

class Solution {public int[] distributeCandies(int candies, int num_people) {int sum = candies;int i = 1;int cur = 0;int[] can = new int[num_people];while (sum >= i) {sum -= i;can[cur++] += i;if (cur >= num_people) {cur = 0;}i++;}can[cur] += sum;return can;}}

http://www.ppmy.cn/devtools/46807.html

相关文章

第N4周:中文文本分类

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、预备知识 中文文本分类和英文文本分类都是文本分类&#xff0c;为什么要单独拎出来个中文文本分类呢&#xff1f; 在自然语言处理&#xff08;NLP&#x…

商品详情接口在独立站的应用及接口请求示例

商品详情接口在独立站的应用主要体现在以下几个方面&#xff0c;这些应用不仅提升了独立站的运营效率&#xff0c;也优化了用户体验&#xff1a; 商品信息查询与展示&#xff1a; 商品详情接口允许独立站通过商品ID或关键词快速查询商品详细信息&#xff0c;包括价格、库存、…

JavaWeb1 Json+BOM+DOM+事件监听

JS对象-Json //Json 字符串转JS对象 var jsObject Json.parse(userStr); //JS对象转JSON字符串 var jsonStr JSON.stringify(jsObject);JS对象-BOM BOM是浏览器对象模型&#xff0c;允许JS与浏览器对话 它包括5个对象&#xff1a;window、document、navigator、screen、hi…

【通信协议-RTCM】RTCM通信协议常用英文缩写词汇对照表

RTCM通信协议常用英文缩写词汇对照表 ARP ---- Antenna Reference Point 天线参考点BDS ---- BeiDou Navigation Satellite System 北斗卫星导航系统CRS ---- Coordinate Reference System 坐标参考系ECEF ---- Earth Centered Earth Fixed 地心地固坐标系GLONASS ---- Global…

音视频开发—V4L2介绍,FFmpeg 打开摄像头输出yuv文件

实验平台&#xff1a;Ubuntu20.04 摄像头&#xff1a;1080P 监控摄像头&#xff0c;采用V4L2驱动框架 文章目录 1.V4L2相关介绍1.1. 基本概念1.2. 主要功能1.3. V4L2驱动框架1.4. 主要组件1.5. 使用V4L2的应用1.6. 常用V4L2工具 2.ffmpeg命令实现打开摄像头输出yuv文件3.使用C…

DRIVEN|15分的CNN+LightGBM怎么做特征分类,适用于转录组

说在前面 今天分享一篇做深度学习模型的文章&#xff0c;这是一篇软硬结合的研究&#xff0c;排除转换实体产品&#xff0c;我们做生信基础研究的可以学习模仿这个算法&#xff0c;适用且不局限于临床资料&#xff0c;转录组数据&#xff0c;GWAS数据。 今天给大家分享的一篇文…

Mysql——索引

索引的类型 按「数据结构」分类&#xff1a;Btree索引、Hash索引、Full-text索引。按「物理存储」分类&#xff1a;聚簇索引&#xff08;主键索引&#xff09;、二级索引&#xff08;辅助索引&#xff09;。按「字段特性」分类&#xff1a;主键索引、唯一索引、普通索引、前缀…

React UseMemo源码分析

useMemo useMemo 是 React 提供的内置 Hooks&#xff0c;主要作用就是缓存&#xff0c;如果依赖项没有变化&#xff0c;Memo 方法不会再次执行&#xff0c;计算量比较高的方法可以使用&#xff0c;从而提高用户体验。本文将通过一个例子跟踪 Memo 的创建、更新流程。 App.js …