2023-2-24 刷题情况
获取单值网格的最小操作数
题目描述
给你一个大小为 m x n 的二维整数网格 grid 和一个整数 x 。每一次操作,你可以对 grid 中的任一元素 加 x 或 减 x 。
单值网格 是全部元素都相等的网格。
返回使网格化为单值网格所需的 最小 操作数。如果不能,返回 -1 。
样例
样例输入
grid = [[2,4],[6,8]], x = 2
grid = [[1,5],[2,3]], x = 1
grid = [[1,2],[3,4]], x = 2
样例输出
4
解释:可以执行下述操作使所有元素都等于 4 :
2 加 x 一次。
6 减 x 一次。
8 减 x 两次。
共计 4 次操作。
5
解释:可以使所有元素都等于 3 。
-1
解释:无法使所有元素相等。
提示
- m==grid.lengthm == grid.lengthm==grid.length
- n==grid[i].lengthn == grid[i].lengthn==grid[i].length
- 1<=m,n<=1051 <= m, n <= 10^51<=m,n<=105
- 1<=m∗n<=1051 <= m * n <= 10^51<=m∗n<=105
- 1<=x,grid[i][j]<=1041 <= x, grid[i][j] <= 10^41<=x,grid[i][j]<=104
思路
第一个测试用例具误导性,因为第一个测试用例中,所有数字变为4所需的操作次数与变为6的所需操作次数一样。
最初思路就是通过一定的操作数使所有数都变为中位数。因为中位数的性质,所有数变为中位数的所需操作数肯定是最小的。
代码实现
class Solution {public int minOperations(int[][] grid, int x) {List<Integer> list = new ArrayList<>();int m = grid.length, n = grid[0].length;for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){// 所有数组的差值都必须是x的倍数,不然无法通过+-x改变成为指定值。if(Math.abs(grid[0][0] - grid[i][j]) % x != 0) return -1;list.add(grid[i][j]);}}int ans = 0;Collections.sort(list);int k = list.get(n * m / 2);for(int i = 0; i < list.size(); i++){ans += Math.abs(list.get(i) - k) / x;}return ans;}
}
下一个排列
题目描述
整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。
-
例如,arr = [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。
整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的 下一个排列 就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。 -
例如,arr = [1,2,3] 的下一个排列是 [1,3,2] 。
-
类似地,arr = [2,3,1] 的下一个排列是 [3,1,2] 。
-
而 arr = [3,2,1] 的下一个排列是 [1,2,3] ,因为 [3,2,1] 不存在一个字典序更大的排列。
给你一个整数数组 nums ,找出 nums 的下一个排列。
必须 原地 修改,只允许使用额外常数空间。
样例
样例输入
nums = [1,2,3]
nums = [3,2,1]
nums = [1,1,5]
样例输出
[1,3,2]
[1,2,3]
[1,5,1]
提示
- 1 <= nums.length <= 100
- 0 <= nums[i] <= 100
思路
最初思路,从后枚举nums[i],并且维护已经所有已枚举过的最小值,如果当前nums[i] < 维护的最小值,那么交换两个值。并且记录当前交换的下标i,之后在对i+1 ~ n-1区间内进行排序即可。主要实现难点就是局部排序,可以说很麻烦。
之后看的题解理解咯另外一种思路,从后枚举一定是有单调性的,在单调的基础上直接反转这个局部区间即可。(反转局部区间使用双指针很方便)
代码实现
class Solution {public void nextPermutation(int[] nums) {int i = nums.length - 2;while(i >= 0 && nums[i] >= nums[i+1]) i--;if(i >= 0){int j = nums.length - 1;while(j >= 0 && nums[i] >= nums[j]) --j;swap(nums, i, j);}int l = i + 1, r = nums.length - 1;while(l < r){swap(nums, l, r);r--;l++;}}private void swap(int[] nums, int a, int b){int tmp = nums[a];nums[a] = nums[b];nums[b] = tmp;}private void reverse(int[] nums, int l, int r){while(l < r){swap(nums, l, r);r--;l++;}}
}
相关文章:
2023-2-24 刷题情况
获取单值网格的最小操作数 题目描述 给你一个大小为 m x n 的二维整数网格 grid 和一个整数 x 。每一次操作,你可以对 grid 中的任一元素 加 x 或 减 x 。 单值网格 是全部元素都相等的网格。 返回使网格化为单值网格所需的 最小 操作数。如果不能,返…...
测试员拿到新项目怎么着手测试?不要慌,照做准没错
一、目标 结合公司现有的项目情况制定合理规范的测试流程,提高测试效率和产品质量,尽可能减少客户对产品的问题反馈, 核心还是要加强项目组成员之间的工作交流和沟通,保证整个项目的高效率的按质按量的交付。 二、测试流程说明…...
通过cfssl自签证书https证书
背景 公司内部自建Web服务,通过自签CA,然后签发https证书 工具地址: GitHub - cloudflare/cfssl: CFSSL: Cloudflares PKI and TLS toolkit 使用步骤: 1. 在release页面中下载最新的二进制包,我使用的是1.5的解压并重命名二进制文件 tar…...
openEuler部署Ceph集群(块存储)
openEuler部署Ceph集群1 目标2 环境2.1 服务器信息2.2 软件信息3 部署流程3.1 获取系统镜像3.2 创建虚拟机3.3 配置虚拟机3.3.1 配置互信3.3.2 关闭防火墙3.3.3 配置免密登录3.3.4 配置NTP3.3.4.1 安装NTP服务3.3.4.2 配置NTP服务端3.3.4.3 配置NTP客户端3.3.4.4 启动NTP服务3.…...
npm install vue2-ace-editor 安装报错
npm install vue2-ace-editor 安装报错,如下图 目录 npm install vue2-ace-editor 安装报错,如下图 🧨🧨🧨解决方法:在命令后面加上 神秘代码 npm install vue2-ace-editor --save --legacy-peer-deps &a…...
【PyQt5图形界面编程(2)】:创建工程
创建工程 一、创建工程二、开始开发1、运行Qt5Designer,创建QT窗口2、运行pyUIC,转换xx.ui成xx.py3、main.py中引用xx.py中的类4、打包main.py成main.exe来发布5、执行终端报警处理方法三、其他(如果涉及)1、配置环境变量一、创建工程 采用虚拟环境来创建工程 相关的paka…...
ansible实战应用系列教程9:管理inclusions
ansbile实战应用系列教程8:管理inclusions InclusionsIncluding TasksIncluding VariablesInclusions 当处理复杂或冗长的剧本时,管理员可以使用单独的文件将任务和变量列表划分为更小的部分,以便于管理。在playbook中引入外部任务文件和变量有多种方法。 方法一:tasks使用…...
MyBatis学习笔记(五) —— MyBatis获取参数值的两种方式
5、MyBatis获取参数值的两种方式 MyBatis获取参数值的两种方式:${} 和 #{} ${} 的本质就是字符串拼接, #{} 的本质就是占位符赋值 ${} 使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号&a…...
go module构建项目
在go 1.11版本中引入了Go Module内置的包管理模块,是GOPATH的替代品,集成了版本控制和软件包分发支持的功能。即go使用modules管理依赖,项目依赖构建时不需要再依赖GOPATH环境变量。 要使用go module首先要激活modules .升级go到1.11版本 .这…...
已经准备上千道软件测试面试题了,建议大家收藏!!!还有视频详解!
2023华为软件测试笔试面试真题,抓紧收藏不然就看不到了_测试小鬼的博客-CSDN博客_华为软件测试工程师面试题1、对计算机软件和硬件资源进行管理和控制的软件是(D)A.文件管理程序B.输入输出管理程序C.命令出来程序D.操作系统2、在没有需求文档…...
C++设计模式(19)——访问者模式
亦称: Visitor 意图 访问者模式是一种行为设计模式, 它能将算法与其所作用的对象隔离开来。 问题 假如你的团队开发了一款能够使用巨型图像中地理信息的应用程序。 图像中的每个节点既能代表复杂实体 (例如一座城市)…...
ChatGPT 的工作原理:机器人背后的模型
这篇对支持 ChatGPT 的机器学习模型的温和介绍,将从大型语言模型的介绍开始,深入探讨使 GPT-3 得到训练的革命性自我注意机制,然后深入研究人类反馈的强化学习,使 ChatGPT 与众不同的新技术。 大型语言模型 ChatGPT 是一类被称…...
FreeRTOS入门(04):中断、内存、追踪与调试
文章目录目的中断内存堆(heap)栈(stack)断言调试总结目的 有了前面的几篇文章 FreeRTOS 基本上已经可以在项目中使用上了: 《FreeRTOS入门(01):基础说明与使用演示》 《FreeRTOS入门…...
【C语言】带你彻底理解指针(1)
✨✨✨✨如果文章对你有帮助记得点赞收藏关注哦!!✨✨✨✨ 文章目录指针的介绍:一、简单指针🌈1.1 指针的定义与使用1.2 指针与数组二、指针数组✨三、数组指针🌞3.1 数组指针的定义3.2 ”数组名“与”&数组名“3.…...
C/C++ 中 JSON 库的使用 (CJSON/nlohmann)
C/C 中 JSON 库的使用 (CJSON/nlohmann)概述cjson基本操作从(字符指针)缓冲区中解析出JSON结构转成成JS字符串(将传入的JSON结构转化为字符串)将JSON结构所占用的数据空间释放JSON 值的创建创建一个值类型的数据创建一个对象(文档)…...
【Opencv项目实战】目标检测:自动检测出现的所有动态目标
文章目录一、项目思路二、算法详解2.1、计算两个数组或数组与标量之间的每个元素的绝对差。2.2、轮廓检测 绘制物体轮廓 绘制矩阵轮廓2.3、连续窗口显示2.4、读取视频,显示视频,保存视频三、项目实战:实时动态目标检测实时动态目标检测一、…...
活动报名:Tapdata Cloud V3 最新功能全解与核心应用场景演示
作为中国的 “Fivetran/Airbyte”, Tapdata Cloud 自初版公测以来,已累积10,000 注册用户。核心场景包括 Any Source → Any Target 的实时数据库同步、数据入湖入仓,以及通用 ETL 处理等。近期,功能特性全面优化的 Tapdata Cloud V3 也已开放…...
人工智能AI威武,爱也……恨也……
人工智能AI威武,爱也!恨也!!它会创作会代码,从它那儿能仿到更好的思维;多它那里可以学到更好的代码。它聪慧全能,成为一坨人偷懒神器;变成“智者”作弊的“倚天屠龙”!&a…...
SpringBoot-基础篇
SpringBoot基础篇 在基础篇中,我给学习者的定位是先上手,能够使用SpringBoot搭建基于SpringBoot的web项目开发,所以内容设置较少,主要包含如下内容: SpringBoot快速入门SpringBoot基础配置基于SpringBoot整合SSMP…...
Tapdata Connector 实用指南:实时数仓场景之数据实时同步至 ClickHouse
【前言】作为中国的 “Fivetran/Airbyte”, Tapdata 是一个以低延迟数据移动为核心优势构建的现代数据平台,内置 60 数据连接器,拥有稳定的实时采集和传输能力、秒级响应的数据实时计算能力、稳定易用的数据实时服务能力,以及低代码可视化操作…...
为什么LivePortrait能吊打Diffusion模型?揭秘快手69M训练数据背后的技术取舍
LivePortrait为何能突破扩散模型瓶颈?解析69M训练数据驱动的工业级优化策略 当开源社区还在为扩散模型的生成质量惊叹时,快手LivePortrait团队已经用12.8ms/帧的推理速度和6.5K GitHub星标证明:在工业级人像动画领域,隐式关键点框…...
新手入门:借助快马AI实现你的第一个超能力选择网页
作为一个刚接触编程的新手,我最近想尝试做一个有趣的网页项目。看到网上那些酷炫的交互效果,总觉得很神奇但又无从下手。直到发现了InsCode(快马)平台,它让我这个小白也能轻松实现"超能力选择器"这样的创意想法。 项目构思 我想做一…...
用YOLOv8在树莓派上跑个‘狗脸识别’:斯坦福犬类数据集实战与轻量化部署指南
树莓派上的智能犬种识别:YOLOv8轻量化部署全流程实战 当你在公园遛狗时,有没有遇到过路人好奇询问狗狗品种的情况?传统的犬种识别往往依赖专业兽医或资深养犬人士的经验判断,而今天我们将用一块信用卡大小的树莓派,配合…...
开源项目常见安装故障的系统性排查与解决
开源项目常见安装故障的系统性排查与解决 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable various custom nodes of ComfyUI. Fur…...
Qwen3.5-4B-Claude-Opus保姆级教程:Web端UI功能分区与高级参数联动说明
Qwen3.5-4B-Claude-Opus保姆级教程:Web端UI功能分区与高级参数联动说明 1. 模型与平台介绍 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF 是一个基于 Qwen3.5-4B 的推理蒸馏模型,重点强化了结构化分析、分步骤回答、代码与逻辑类问题的处理能…...
it-tools:Docker一键部署,中文界面即开即用
1. 为什么选择Docker部署it-tools? 最近在帮团队搭建开发环境时,发现很多同事都在反复安装各种零散的小工具——JSON格式化、时间戳转换、密码生成器...既占用本地资源又难以统一管理。直到发现了it-tools这个神器,它把200实用工具打包成Web应…...
PasteMD体验报告:极简界面+强大功能,这才是生产力工具该有的样子
PasteMD体验报告:极简界面强大功能,这才是生产力工具该有的样子 1. 重新定义"文本整理":当AI成为你的第二大脑 每天,我们都在与各种杂乱文本搏斗:会议速记、技术日志、网页摘录、临时灵感...这些内容往往以…...
Nuxt3 + PM2 + Nginx:打造高可用前端部署方案(附常见问题排查指南)
Nuxt3 PM2 Nginx:打造高可用前端部署方案(附常见问题排查指南) 在当今快速迭代的Web开发领域,Nuxt3凭借其出色的服务端渲染能力和现代化的开发体验,正成为越来越多技术团队的首选框架。然而,将Nuxt3应用部…...
【技术干货】把 Claude 变成“本地自动化工程师”:Anthropic Computer Use 能力与实战落地指南
摘要 Anthropic 在 Claude Code 中正式引入 Computer Use 能力,让大模型可以直接操作你的桌面应用和浏览器,从“写代码助手”升级为“全栈自动化代理”。本文从原理、典型场景、跨平台替代方案,到如何用统一 OpenAI 兼容 API(基于…...
Nomad与Consul集群搭建实战指南
1. 为什么选择NomadConsul组合? 如果你正在寻找一套轻量级、易上手的分布式系统解决方案,Nomad和Consul这对黄金搭档绝对值得考虑。我最早接触这个组合是在三年前的一个物联网项目中,当时我们需要在20台边缘计算设备上动态部署服务࿰…...
