当前位置: 首页 > news >正文

【力扣周赛 338】

6354. K 件物品的最大和 - 力扣(Leetcode)

袋子中装有一些物品,每个物品上都标记着数字 10-1
给你四个非负整数 numOnesnumZerosnumNegOnesk
袋子最初包含:
numOnes 件标记为 1 的物品。
numZeroes 件标记为 0 的物品。
numNegOnes 件标记为 -1 的物品。
现计划从这些物品中恰好选出 k 件物品。返回所有可行方案中,物品上所标记数字之和的最大值。

示例 1:
输入:numOnes = 3, numZeros = 2, numNegOnes = 0, k = 2 输出:2 解释:袋子中的物品分别标记为 {1, 1, 1, 0, 0} 。取 2 件标记为 1 的物品,得到的数字之和为 2 。 可以证明 2 是所有可行方案中的最大值。
示例 2:
输入:numOnes = 3, numZeros = 2, numNegOnes = 0, k = 4 输出:3 解释:袋子中的物品分别标记为 {1, 1, 1, 0, 0} 。取 3 件标记为 1 的物品,1 件标记为 0 的物品,得到的数字之和为 3 。 可以证明 3 是所有可行方案中的最大值。

提示:
0 <= numOnes, numZeros, numNegOnes <= 50
0 <= k <= numOnes + numZeros + numNegOnes

思路

easy等级的,比较简单。

要去到最大值,分别有以下3种情况:

  1. 全部是1

  1. 1和0混合

  1. 1、0和-1混合,因为 k <= numOnes + numZeros + numNegOnes,所以最后的值就是 1的个数减去我们需要的-1的个数(k - numOnes - numZeros)

代码实现

class Solution {public int kItemsWithMaximumSum(int numOnes, int numZeros, int numNegOnes, int k) {if(numOnes > k){return k;}else if(numOnes + numZeros > k){return numOnes;}else{return numOnes - k + numOnes + numZeros;}}
}

6355. 质数减法运算 - 力扣(Leetcode)

给你一个下标从 0 开始的整数数组 nums ,数组长度为 n
你可以执行无限次下述运算:
选择一个之前未选过的下标 i ,并选择一个 严格小于 nums[i] 的质数 p ,从 nums[i] 中减去 p 。
如果你能通过上述运算使得 nums 成为严格递增数组,则返回 true ;否则返回 false
严格递增数组 中的每个元素都严格大于其前面的元素。

示例 1:
输入:nums = [4,9,6,10] 输出:true 解释: 在第一次运算中:选择 i = 0 和 p = 3 ,然后从 nums[0] 减去 3 ,nums 变为 [1,9,6,10] 。 在第二次运算中:选择 i = 1 和 p = 7 ,然后从 nums[1] 减去 7 ,nums 变为 [1,2,6,10] 。 第二次运算后,nums 按严格递增顺序排序,因此答案为 true 。
示例 2:
输入:nums = [6,8,11,12] 输出:true 解释:nums 从一开始就按严格递增顺序排序,因此不需要执行任何运算。
示例 3:
输入:nums = [5,8,3] 输出:false 解释:可以证明,执行运算无法使 nums 按严格递增顺序排序,因此答案是 false 。

提示:
1 <= nums.length <= 1000
1 <= nums[i] <= 1000
nums.length == n

思路

首先,说一下踩到的坑。

  1. 严格小于 nums[i] 的质数 p。严格小于就是不包括等于,应该是 a < b,而不是 a <= b

  1. 每一个位置减去最佳的数(p)之后,记得break,跳出寻找最佳的数的循环。

然后就是这一题的思路。一看到这个题目,不知道怎么去找到每个位置最合适的p,因为后面的数,会因为前面的数受影响,而后面又注意到“选择一个之前未选过的下标 i”,所以每一个位置只可以减一次。所以我们就从头开始遍历,前面的变成最小的能够变成的数,如果还是不能变成严格递增的序列,那么这个序列不可能会变成严格递增的序列。

代码实现

class Solution {public static boolean isPrime(int n) { //判断质数(素数)if (n <= 3) {return n > 1;}//判断一个数能否被小于sqrt(n)的数整除int sqrt = (int)Math.sqrt(n);for (int i = 2; i <= sqrt; i++) {if(n % i == 0) {return false;}}return true;}public boolean check(int[] nums, int k){ //判断该序列是否严格递增int flag = 0;for(int i = k; i < nums.length - 1; i++){if(nums[i] >= nums[i + 1]){flag = 1;break;}}if(flag == 0){return true;}return false;}public void find(int[] nums, int k){ //找到最合适的pif(k == 0){ //序列第一位不受前面一位的影响,因为没有前面一位if(nums[k] > 2){for(int j = nums[k] - 1; j > 1; j--){if(isPrime(j)){nums[k] = nums[k] - j;break;}}}}else{for(int j = nums[k] - 1; j > 1; j--){if(isPrime(j) && nums[k] - j > nums[k - 1]){nums[k] = nums[k] - j;break;}}}}public boolean primeSubOperation(int[] nums) {if(check(nums, 0)){return true;}for(int i = 0; i < nums.length; i++){find(nums, i);if(check(nums, 0)){return true;}}return false;}
}

6357. 使数组元素全部相等的最少操作次数 - 力扣(Leetcode)

给你一个正整数数组 nums
同时给你一个长度为 m 的整数数组 queries 。第 i 个查询中,你需要将 nums 中所有元素变成 queries[i] 。你可以执行以下操作 任意 次:
将数组里一个元素 增大 或者 减小 1 。
请你返回一个长度为 m 的数组 answer ,其中 answer[i]是将 nums 中所有元素变成 queries[i]最少 操作次数。
注意,每次查询后,数组变回最开始的值。

示例 1:
输入:nums = [3,1,6,8], queries = [1,5] 输出:[14,10] 解释:第一个查询,我们可以执行以下操作: - 将 nums[0] 减小 2 次,nums = [1,1,6,8] 。 - 将 nums[2] 减小 5 次,nums = [1,1,1,8] 。 - 将 nums[3] 减小 7 次,nums = [1,1,1,1] 。 第一个查询的总操作次数为 2 + 5 + 7 = 14 。 第二个查询,我们可以执行以下操作: - 将 nums[0] 增大 2 次,nums = [5,1,6,8] 。 - 将 nums[1] 增大 4 次,nums = [5,5,6,8] 。 - 将 nums[2] 减小 1 次,nums = [5,5,5,8] 。 - 将 nums[3] 减小 3 次,nums = [5,5,5,5] 。 第二个查询的总操作次数为 2 + 4 + 1 + 3 = 10 。
示例 2:
输入:nums = [2,9,6,3], queries = [10] 输出:[20] 解释:我们可以将数组中所有元素都增大到 10 ,总操作次数为 8 + 1 + 4 + 7 = 20 。

提示:
n == nums.length
m == queries.length
1 <= n, m <= 105
1 <= nums[i], queries[i] <= 109

思路

首次尝试,暴力超时。

然后,想到直接获取需要增加的次数以及减少的次数,两者相加即可。因此,想到了前缀和,得到小于该元素的所有元素和大于该元素的所有元素即可。但是我们还是得要去找到和queries最相近的数的位置,从而区分左右两边,所以我们需要用到二分查找

代码实现

class Solution {public int binarySearch(int[] nums, int des){//定义初始最小、最大索引int low = 0;int high = nums.length - 1;//确保不会出现重复查找,越界while (low <= high) {//计算出中间索引值int middle = (high + low) >>> 1;//防止溢出if (des == nums[middle]) {return middle;//判断下限} else if (des < nums[middle]) {high = middle - 1;//判断上限} else {low = middle + 1;}}return -1;}public List<Long> minOperations(int[] nums, int[] queries) {List<Long> list = new ArrayList<>();Arrays.sort(nums);int[] a = new int[nums.length];for (int i = 0; i < nums.length; i++) { // 前缀和if (i == 0) {a[i] = nums[i];} else {a[i] = nums[i] + a[i - 1];}}for (int i = 0; i < queries.length; i++) {long sum = 0L;if (nums[nums.length - 1] <= queries[i]) {sum = nums.length * queries[i] - a[nums.length - 1];} else if (nums[0] >= queries[i]) {sum = a[nums.length - 1] - nums.length * queries[i];} else {// 定义初始最小、最大索引int low = 0;int high = nums.length - 1;int index = 0;// 确保不会出现重复查找,越界while (low <= high) {// 计算出中间索引值int middle = (high + low) >> 1;// 防止溢出if (queries[i] >= nums[middle]) {index = middle;low = middle + 1;// 判断下限} else if (queries[i] < nums[middle]) {high = middle - 1;// 判断上限}}sum = queries[i] * (index + 1) - a[index] + a[nums.length - 1] - a[index] - queries[i] * (nums.length - index - 1);}list.add(sum);}return list;}
}

6356. 收集树中金币 - 力扣(Leetcode)

给你一个 n 个节点的无向无根树,节点编号从 0n - 1 。给你整数 n 和一个长度为 n - 1 的二维整数数组 edges ,其中 edges[i] = [ai, bi] 表示树中节点 ai 和 bi 之间有一条边。再给你一个长度为 n 的数组 coins ,其中 coins[i] 可能为 0 也可能为 11 表示节点 i 处有一个金币。
一开始,你需要选择树中任意一个节点出发。你可以执行下述操作任意次:
收集距离当前节点距离为 2 以内的所有金币,或者
移动到树中一个相邻节点。
你需要收集树中所有的金币,并且回到出发节点,请你返回最少经过的边数。
如果你多次经过一条边,每一次经过都会给答案加一。

示例 1:
输入:coins = [1,0,0,0,0,1], edges = [[0,1],[1,2],[2,3],[3,4],[4,5]] 输出:2 解释:从节点 2 出发,收集节点 0 处的金币,移动到节点 3 ,收集节点 5 处的金币,然后移动回节点 2 。

示例 2:
输入:coins = [0,0,0,1,1,0,0,1], edges = [[0,1],[0,2],[1,3],[1,4],[2,5],[5,6],[5,7]] 输出:2 解释:从节点 0 出发,收集节点 4 和 3 处的金币,移动到节点 2 处,收集节点 7 处的金币,移动回节点 0 。

提示:
n == coins.length
1 <= n <= 3 * 104
0 <= coins[i] <= 1
edges.length == n - 1
edges[i].length == 2
0 <= ai, bi < n
ai != bi
edges 表示一棵合法的树。

思路

代码实现

相关文章:

【力扣周赛 338】

6354. K 件物品的最大和 - 力扣&#xff08;Leetcode&#xff09;袋子中装有一些物品&#xff0c;每个物品上都标记着数字 1、0或 -1。给你四个非负整数 numOnes、numZeros、numNegOnes和 k。袋子最初包含&#xff1a;numOnes 件标记为 1 的物品。numZeroes 件标记为 0 的物品。…...

大数据Flink进阶(八):Apache Flink架构介绍

Apache Flink架构介绍 一、Flink组件栈 在Flink的整个软件架构体系中,同样遵循这分层的架构设计理念,在降低系统耦合度的同时,也为上层用户构建Flink应用提供了丰富且友好的接口。...

Mars3d项目启动上的一些坑

前言 最近新入职了一家公司&#xff0c;公司新开了有个未来城市的项目&#xff0c;需要用到3D城市建模&#xff0c;公司老总选了Mars3d作为前端框架&#xff0c;项目分给我了&#xff0c;又是一个全新的领域&#xff0c;开搞吧&#xff01; 下面是自己遇到的几个小问题&#x…...

通俗易懂【Springboot】 单文件下载和批量下载(多个文件合成一个压缩包下载)

文章目录一.单文件下载1.简单理解文件下载2.单文件下载的具体代码实现3.测试4.单文件下载整体代码二.多文件批量下载&#xff08;多个文件合成一个压缩包下载&#xff09;1.多文件下载的实现方式&#xff0c;这里使用了ZipOutputStream2.具体代码实现3.测试4.文件批量下载&…...

CnOpenData中国行政区划shp数据

一、数据简介 中国行政区划数据是重要的基础地理信息数据&#xff0c;目前不同来源的全国行政区划数据非常多&#xff0c;但能够开放获取的高质量行政区域数据少之又少。基于此&#xff0c;锐多宝的地理空间制作一套2013-2023年可开放获取的高质量行政区划数据。该套数据以2022…...

GPT-4零失误通关大厂模拟面试,offer拿到手软?与AGI首次接触

来源: FoxyearMeta “GPT-4可被视作AGI &#xff08;通用人工智能&#xff09;的早期版本。” 如若从他人口中说出&#xff0c;或许是无稽之谈—— 但是由微软雷蒙德研究院机器学习理论组负责人万引大神Sbastien Bubeck与2023新视野数学奖得主Ronen Eldan、2023新晋斯隆研究奖得…...

Hardhat 环境搭建及教程示例

一.安装node.js curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash nvm install 18 nvm use 18 nvm alias default 18 npm install npm --global # Upgrade npm to the latest version 二. 安装hardhat 2.1 创建hardhat安装目录 mkdir hard…...

复杂链表的复制-剑指Offer35-java

一、题目描述 请实现 copyRandomList 函数&#xff0c;复制一个复杂链表。在复杂链表中&#xff0c;每个节点除了有一个 next 指针指向下一个节点&#xff0c;还有一个 random 指针指向链表中的任意节点或者 null。 示例 1&#xff1a; 输入&#xff1a;head [[7,null],[13,…...

【Linux】进程理解与学习Ⅰ-进程概念

环境&#xff1a;centos7.6&#xff0c;腾讯云服务器Linux文章都放在了专栏&#xff1a;【Linux】欢迎支持订阅&#x1f339;相关文章推荐&#xff1a;【Linux】冯.诺依曼体系结构与操作系统进程概念什么是进程&#xff1f;进程是什么&#xff1f;我们打开任务管理器可以看到有…...

WebKitX ActiveX 6.0 X86 Crack

WebKitX ActiveX将 Chromium Embedded Framework (CEF3) 包装到一个进程外的 ActiveX 组件中&#xff0c;以便与 OLE/COM 语言一起使用。Chromium Embedded Framework 封装了 WebKit Blink HTML5 Renderer 和 Google V8 JavaScript Engine。这是一个用于商业用途的生产级稳定组…...

开源项目:数据库表结构生成文档工具

目录 一、软件介绍 二、技术框架 三、功能介绍 四、代码展示 1、获取数据库信息部分代码 2、导出Html文档代码 五、运行效果 六、项目开源地址 一、软件介绍 今天给大家分享我自己编写的数据库表结构文档生成工具&#xff0c;方便大家在实际开发当中&#xff0c;可以很方便导出…...

spring的两种拦截器HandlerIntercepter和MethodIntercepter

介绍 Spring有两种拦截器提供给我们使用&#xff0c;一种是HandlerIntercepter&#xff0c;另一种是MethodIntercepter。这两种的来源不同&#xff0c;实现方式也不同&#xff0c;具体的下面来看一下。 HandlerIntercepter 来源 来源于spring-webmvc包 HandlerIntercepter拦…...

初级算法-字符串

主要记录算法和数据结构学习笔记&#xff0c;新的一年更上一层楼&#xff01; 初级算法-字符串一、反转字符串二、反转字符串&#xff08;二&#xff09;三、替换空格四、翻转字符串里的单词五、左旋转字符串六、实现 strStr()七、重复的子字符串字符串中元素只能是字符String…...

华为OD机试题 - 寻找目标字符串(JavaScript)| 机考必刷

更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为…...

删除Terminating状态的namespace:cattle-system

这里以cattle-system为例&#xff01;执行删除命令后namespace&#xff08;也是用其他k8s object&#xff09;仍然存在&#xff0c;首先执行 kubectl edit namespace cattle-system 查看是否存在spec.finalizers: kubernetes&#xff0c;如&#xff1a; spec: finalizers:…...

MiniOB 并发B+树实现解析

MiniOB 是 OceanBase 联合华中科技大学推出的一款用于教学的小型数据库系统&#xff0c;希望能够帮助数据库爱好者系统性的学习数据库原理与实战。 B 树介绍 B 树是传统数据库中常见的索引数据结构&#xff0c;比如MySQL、PostgreSQL都实现了B树索引。B 树是一个平衡多叉树&am…...

SpringCloud负载均衡服务调用——Ribbon

Ribbon 本专栏学习内容来自尚硅谷周阳老师的视频 有兴趣的小伙伴可以点击视频地址观看 简介 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。 简单的说&#xff0c;Ribbon是Netflix发布的开源项目&#xff0c;主要功能是提供客户端的软件负载均衡算…...

各种邮箱服务软件对比

1.宝塔邮局管理器 特点:简单易用,可视化操作,小白也能搞,还有备份功能,一般足够用了 缺点:稳定性真是差,隔三差五的不能收发.没有接口,不能任意修改邮箱密码,只能管理员修改 注意要点:一定要开启ssl,否则有些邮箱给你发邮件你收不到 建议:不要入坑.坏了之后没法修复,哭都没地方…...

相机单独标定的实现过程[autoware标定]、tmp文件的查看方式

安装了autoware1.13和calibration标定包&#xff0c;发现实现相机单独标定的过程较为坎坷&#xff0c;参考了一些博主的方法&#xff0c;发现下面的过程更加适合自己&#xff0c;做个笔记。 1安装标定箱&#xff08;与calibration标定包的安装并不冲突&#xff09; 标定工具箱…...

4.10.1、IP 多播技术的相关基本概念

多播&#xff08;Multicast&#xff0c;也称为组播&#xff09;是一种实现 “一对多” 通信的技术&#xff0c;与传统单播“一对一”通信相比&#xff0c;多播可以极大地节省网络资源。 在因特网上进行的多播&#xff0c;称为 IP 多播。 1、单播 & 多播 如下所示&#xf…...

从ZZULIOJ 1138题出发,手把手教你用C语言写一个‘标识符检查器’小工具

从OJ题到实战工具&#xff1a;用C语言打造智能标识符检查器 在编程学习过程中&#xff0c;我们经常遇到各种在线判题系统&#xff08;OJ&#xff09;的练习题&#xff0c;比如判断一个字符串是否为合法的C语言标识符。这类题目看似简单&#xff0c;但如何将其转化为一个真正实用…...

从人脸变形到地形编辑:拆解RBF(径向基函数)在游戏与仿真中的另类用法

从人脸变形到地形编辑&#xff1a;拆解RBF&#xff08;径向基函数&#xff09;在游戏与仿真中的另类用法 当游戏角色面部需要自然扭曲表情时&#xff0c;当虚拟地形需要实时生成连绵山脉时&#xff0c;图形开发者们往往面临同一个数学挑战&#xff1a;如何用少量控制点驱动复杂…...

ETAS ISOLAR-A配置AUTOSAR COM模块实战:从DBC导入到信号超时监控的完整避坑指南

ETAS ISOLAR-A配置AUTOSAR COM模块实战&#xff1a;从DBC导入到信号超时监控的完整避坑指南 在汽车电子领域&#xff0c;AUTOSAR COM模块作为通信堆栈的核心组件&#xff0c;承担着信号路由、协议转换和通信控制的关键职能。对于使用ETAS ISOLAR-A工具链的工程师而言&#xff0…...

红队实战靶场搭建与ATTCK攻击链复现

1. 红队靶场环境搭建全流程 搭建红队实战靶场是安全研究的必修课&#xff0c;但很多新手常被复杂的网络配置劝退。我去年给某金融企业做内网渗透培训时&#xff0c;就遇到过学员集体卡在靶机互连阶段的尴尬场面。下面分享一套经过20企业实战验证的搭建方法。 首先需要准备三台虚…...

拆个汽车配件里的压电陶瓷片,用示波器和面包板实测它的‘发电’与‘震动’能力

从废弃汽车配件到电子实验神器&#xff1a;压电陶瓷片的深度拆解与实战应用 引言&#xff1a;压电陶瓷的奇妙世界 在电子爱好者的眼中&#xff0c;垃圾堆可能是最有趣的"宝藏库"。那些被丢弃的汽车配件、旧家电和电子设备中&#xff0c;往往藏着令人惊喜的元器件。其…...

HLK-V20语音模块的智能家居实战:如何用STM32控制灯、电机并连接ESP8266上云

HLK-V20语音模块的智能家居实战&#xff1a;STM32联动控制与云端接入全解析 在智能家居DIY领域&#xff0c;语音控制早已从概念走向现实。HLK-V20作为一款高性价比的纯离线语音识别模块&#xff0c;配合STM32的丰富外设控制能力&#xff0c;可以构建出响应迅速、隐私安全的本地…...

ARM SVE指令集饱和运算原理与应用解析

1. ARM SVE指令集与饱和运算概述在当代处理器架构中&#xff0c;向量化计算已成为提升性能的关键技术。作为ARMv8.2引入的重要扩展&#xff0c;SVE&#xff08;Scalable Vector Extension&#xff09;指令集通过创新的"向量长度无关"设计&#xff0c;为高性能计算和机…...

【2026最新附图文】JDK25 下载、配置、卸载 保姆级教学(全程附实操步骤图)

本文以 windows 10 系统操作演示&#xff0c;详细介绍了 jdk 25 的下载、配置、卸载一、下载 JDK 打开浏览器&#xff0c;访问 Oracle 官方 Java 下载页面&#xff1a;https://www.oracle.com/cn/java/technologies/downloads/向下滚动&#xff0c;找到 JDK &#xff08;这里以…...

中美Agent生态的路径差异——《重构与崛起——OpenClaw时代的中国Agent产业生态报告》解读三

易观分析&#xff1a;面对OpenClaw掀起的全球AI Agent技术浪潮&#xff0c;中美两国走出截然不同的发展路径。美国生态追求底层框架与协议的原创定义&#xff1b;而中国生态以应用驱动、平台绑定和合规先行为核心逻辑&#xff0c;快速将前沿技术转化为可落地的商业现实。这两条…...

NotebookLM播客工作流优化实战:3个被92%用户忽略的关键提示词配置,提升生成质量400%

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;NotebookLM播客生成的核心原理与局限性 NotebookLM 是 Google 推出的基于用户自有文档进行 AI 助理交互的实验性工具&#xff0c;其播客生成功能并非独立模块&#xff0c;而是依托于底层的“多文档理解 指令驱…...