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

Leetcode - 133双周赛

目录

一,3190. 使所有元素都可以被 3 整除的最少操作数

二,3191. 使二进制数组全部等于 1 的最少操作次数 I

三,3192. 使二进制数组全部等于 1 的最少操作次数 II

四,3193. 统计逆序对的数目


一,3190. 使所有元素都可以被 3 整除的最少操作数

本题可以直接模拟,如果使用减法操作,那么需要操作 x % 3 次;如果使用加法操作,那么需要操作 3 - x % 3 次。问最少的操作次数,直接取两者的最小值就行。

代码如下:

class Solution {public int minimumOperations(int[] nums) {int ans = 0;for(int x : nums){ans += Math.min(Math.abs(3-x%3), x%3);}return ans;}
}

二,3191. 使二进制数组全部等于 1 的最少操作次数 I

本题直接从左往右遍历,注 i < nums.length-2 :

  • 遇到0,将nums[i],nums[i+1],nums[i+2] 反转(即 ^1),ans++
  • 遇到1,什么都不做
  • 循环结束判断后两个数是否全为1,如果是,返回ans;否则返回-1

代码如下:

class Solution {public int minOperations(int[] nums) {int ans = 0;int i = 0;for(; i<nums.length-2; i++){if(nums[i]==0){nums[i] ^= 1;nums[i+1] ^= 1;nums[i+2] ^= 1;ans++;}}return nums[i]==1 && nums[i+1]==1 ? ans : -1;}
}

三,3192. 使二进制数组全部等于 1 的最少操作次数 II

本题也可以采用上述做法,代码如下:

class Solution {public int minOperations(int[] nums) {int n = nums.length;int ans = 0;for(int i=0; i<n; i++){if(nums[i] == 0){for(int j=i; j<n; j++)nums[j] ^= 1;ans++;}}return ans;}
}

但是该做法是O(n^2)的时间复杂度,会超时,那么上述做法还有哪里可以优化?可以发现如果一个数执行 ^1操作偶数次,它就会变回原来的值,所以我们可以统计后续元素需要执行反转操作的次数cnt,在枚举到x时,如果cnt为奇数,x ^=1,再判断 x 是否为 0,如果为0,cnt++。依次类推,最终得到的cnt就是答案。

代码如下:

class Solution {public int minOperations(int[] nums) {int ans = 0;for(int i=0; i<nums.length; i++){if(ans%2==1)nums[i] ^= 1;if(nums[i] == 0){ans++;}}return ans;}
}

四,3193. 统计逆序对的数目

本题可以从后先前考虑,假设有3个数,构造逆序对为2的排序:

  • 如果最后一个数是2,那么该数与[0,i-1]能组成0个逆序对,就需要[0,i-1]有2个逆序对
  • 如果最后一个数是1,那么该数与[0,i-1]能组成1个逆序对,就需要[0,i-1]有1个逆序对
  • 如果最后一个数是0,那么该数与[0,i-1]能组成2个逆序对,就需要[0,i-1]有0个逆序对

依次类推,上述问题就化成了与原问题相同的子问题。可以定义dfs(i,j):前 i 个数有 j 个逆序对时的排序个数。

  • 没有requirements束缚,假设 k 为 perm[i] 小于[0,i-1]元素的个数,即 perm[i] 能产生 k 个逆序对,那么问题就转换成了前 i-1个数有 j - k 个逆序对的排序个数。(注:k <= Math.min(i,j))
  • 有requirements束缚,该问题就只能转换成前 i-1个数有 req[i-1] 个逆序对的排序个数。(注:req[i-1] <= j && req[i-1] >= j - i,这两个条件就表示req[i-1]的范围必须在[ j - i,j],可以这样理解,当前perm[i]能与前i-1个数组成[0,i]个逆序对,那么前i-1个数需要有[j - i,j]个逆序对)

代码如下:

class Solution {public int numberOfPermutations(int n, int[][] requirements) {int[] req = new int[n];Arrays.fill(req, -1);req[0] = 0;for(int[] x : requirements){req[x[0]] = x[1];}if(req[0]>0) return 0; for(int[] r : memo)Arrays.fill(r, -1);return dfs(n-1, req[n-1], req);}int[][] memo = new int[301][401];int dfs(int i, int j, int[] req){if(i == 0) return 1;if(memo[i][j] != -1) return memo[i][j];int res = 0;int cnt = req[i-1];if(cnt >= 0){if(cnt <= j && cnt >= j-i)res = dfs(i-1, cnt, req);}else{for(int k=0; k<=Math.min(i, j); k++){res = (res + dfs(i-1, j-k, req))%1_000_000_007;}}return memo[i][j] = res;}
}

相关文章:

Leetcode - 133双周赛

目录 一&#xff0c;3190. 使所有元素都可以被 3 整除的最少操作数 二&#xff0c;3191. 使二进制数组全部等于 1 的最少操作次数 I 三&#xff0c;3192. 使二进制数组全部等于 1 的最少操作次数 II 四&#xff0c;3193. 统计逆序对的数目 一&#xff0c;3190. 使所有元素都…...

C++总结

...

汽车免拆诊断案例 | 2016 款吉利帝豪EV车无法加速

故障现象 一辆2016款吉利帝豪EV车&#xff0c;累计行驶里程约为28.4万km&#xff0c;车主反映车辆无法加速。 故障诊断 接车后路试&#xff0c;行驶约1 km&#xff0c;踩下加速踏板&#xff0c;无法加速&#xff0c;车速为20 km/h左右&#xff0c;同时组合仪表上的电机及控制…...

前端开发之webpack

安装与入门超详细&#xff01;webpack入门教程(一)-腾讯云开发者社区-腾讯云...

将内容复制到剪贴板?分享 1 段优质 JS 代码片段!

大家好&#xff0c;我是大澈&#xff01; 本文约 600 字&#xff0c;整篇阅读约需 1 分钟。 每日分享一段优质代码片段。 今天分享一段 JS 代码片段&#xff0c;使用 Clipboard API 实现将内容复制到剪贴板。 老规矩&#xff0c;先阅读代码片段并思考&#xff0c;再看代码解析…...

MAS0902量产工具分享,MAS0902A开卡教程,MAS0901量产工具下载

MAS0902和MAS1102都是基于SATA3.2技术开发的DRAM-less SSD控制芯片&#xff0c;简单来说就是SATA协议无缓存主控。下面是我摸索的麦光黑金300 240G SSD开卡修复简易教程&#xff0c;也就是MAS0902量产过程&#xff1a; 注意&#xff1a;开卡转接线必须要用ASM1153E或JMS578主控…...

从我邮毕业啦!!!

引言 时间过的好快&#xff0c;转眼间就要从北邮毕业了&#xff0c;距离上一次月度总结又过去了两个月&#xff0c;故作本次总结。 PS: https://github.com/WeiXiao-Hyy/blog整理了后端开发的知识网络&#xff0c;欢迎Star&#xff01; 毕业&#x1f393; 6月1号完成了自己的…...

gemini 1.5 flash (node项目)

https://www.npmjs.com/package/google/generative-ai https://ai.google.dev/pricing?hlzh-cn https://aistudio.google.com/app/apikey https://ai.google.dev/gemini-api/docs/models/gemini?hlzh-cn#gemini-1.5-flash https://ai.google.dev/gemini-api/docs/get-started…...

在线字节大端序小端序转换器

具体请前往&#xff1a;在线字节大端序小端序转换器...

css_17_背景属性鼠标属性

一.背景属性 -属性值&#xff1a;background-color&#xff08;设置背景颜色&#xff09; 默认背景颜色是 transparent。 -属性值&#xff1a;background-image&#xff08;设置背景图片&#xff09; url&#xff08;图片的地址&#xff09; -属性值&#xff1a;background-re…...

Python hash编码(go hash编码)

id"中国人" 首先&#xff0c;go语言hash: import (mmh3 "murmurhash3") mmh3.Murmurhash3([]byte(id)) 对应到Python hash编码&#xff0c;可以直接使用mmh3 import mmh3 mmh3.hash(id,signedFalse) 其源码可以表示为 def sum32WithSeed(datas, seed…...

004 插入排序(lua)

文章目录 123 1 -- Lua中没有类和方法的概念&#xff0c;所以我们将所有功能都写在一个脚本中 -- 交换数组中两个元素的功能 local function swap(arr, i, j) local temp arr[i] arr[i] arr[j] arr[j] temp end -- 插入排序算法的实现 local function insertionS…...

计算机网络 —— 基本概念

基本概念 1. 通信协议2. 面向连接 v.s. 面向无连接3. 电路交换 v.s. 分组交换4. 单工通信 v.s. 双工通信 1. 通信协议 通信协议就是计算机与计算机之间通过网络实现通信时事先达成的一种“约定”。这种“约定”使那些由不同厂商的设备、不同的CPU 以及不同的操作系统组成的计算…...

高精度除法的实现

高精度除法与高精度加法的定义、前置过程都是大致相同的&#xff0c;如果想了解具体内容&#xff0c;可以移步至我的这篇博客&#xff1a;高精度加法计算的实现 在这里就不再详细讲解&#xff0c;只讲解主体过程qwq 主体过程 高精度除法的原理和小学学习的竖式除法是一样的。 …...

STM32CUBEMX配置USB虚拟串口

STM32CUBEMX配置USB虚拟串口 cubemx上默认配置即可。 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 配置完后生成工程&#xff0c;主要就是要知道串口的收发接口就行了。 发送&#xff1a;CDC_Transmit_FS()&#xff0c;同时记得包含头文件#include “…...

安卓开发中margin和padding的区别

在 Android 开发中&#xff0c;margin 和 padding 都是用来定义视图&#xff08;View&#xff09;的空间属性&#xff0c;但它们的作用和应用场景有所不同&#xff1a; Margin&#xff08;外边距&#xff09;&#xff1a; Margin 是视图与其他视图之间的空间。它定义了视图之间…...

Symfony事件调度系统:掌控应用程序生命周期的钥匙

Symfony事件调度系统&#xff1a;掌控应用程序生命周期的钥匙 引言 Symfony是一个高度灵活的PHP框架&#xff0c;用于构建各种规模的Web应用程序。它的核心特性之一是事件调度系统&#xff0c;该系统允许开发者在应用程序的生命周期中触发和监听事件。这种机制为开发者提供了…...

maven安装jar和pom到本地仓库

举例子我们要将 elastic-job-spring-boot-starter安装到本地的maven仓库&#xff0c;如下&#xff1a; <dependency><groupId>com.github.yinjihuan</groupId><artifactId>elastic-job-spring-boot-starter</artifactId><version>1.0.5&l…...

[leetcode]assign-cookies. 分发饼干

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {sort(g.begin(), g.end());sort(s.begin(), s.end());int m g.size(), n s.size();int count 0;for (int i 0, j 0; i…...

如何轻松解决复杂文档格式转换问题

上周&#xff0c;我遇到了一个棘手的问题&#xff1a;需要将一大堆PDF文件转换成可编辑的Word文档&#xff0c;时间紧迫&#xff0c;手动转换根本来不及。朋友推荐我使用了一个网站——xuelin.cc&#xff0c;这个网站不仅提供强大的AI对话功能&#xff0c;还能轻松完成各种文档…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...