力扣HOT100 11-15
11.盛水最多的容器

思路:最大水量 = 底边 * 高度。较短的一边控制最大水量,因此,采用双指针的方式,左、右指针指向开始和末尾,逐个向中间移动,判断左右指针所指向的高度哪个更低,它就向中间移动一个坐标,另外的指针不动,记录最大值,循环结束条件是两个指针指向一处。
代码:
public int maxArea(int[] height) {//特殊情况if (height.length < 2){return 0;}//双指针int l = 0;int r = height.length-1;//最终结果(最大容量)int max = 0;while (l<r){//当前容量int capacity = Math.min(height[l],height[r])*(r-l);max = Math.max(capacity,max);if (height[l]<height[r]){l++;}else {r--;}}return max;
}
12.整数转罗马数字

思路:我们可以把特殊的数值对应的罗马数字依次列举出来,如下图

而我们转换的时候,一定是先找到与要转换的数值能表示的最大的罗马数字,例如
140,与上表对照,一定是140 = 100 + 40;而不是50+50+40;
这里可以采用贪心算法,依次找剩余面值的最大表示。
代码:
public String intToRoman(int num) {int[] values={1000,900,500,400,100,90,50,40,10,9,5,4,1};String[] rom={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};StringBuilder sb=new StringBuilder();//贪心算法,只要num>=values[i],就在最终的字符串中加入对应的罗马数字for(int i=0;i<values.length;i++){while(num>=values[i]){sb.append(rom[i]);num-=values[i];}if (num == 0){break;}}return sb.toString();}
13.罗马数字转整数

思路:
通常情况下,罗马数字中小的数字在大的数字的右边。若输入的字符串满足该情况,那么可以将每个字符视作一个单独的值,累加每个字符对应的数值即可。
例如:XVII = X+V+I+I = 10+5+1+1=17
若存在小的数字在大的数字的左边的情况,根据规则需要减去小的数字。对于这种情况,我们也可以将每个字符视作一个单独的值,若一个数字右侧的数字比它大,则将该数字的符号取反。
XIV=X-I+V=10-1+5=14
代码:
public int romanToInt(String s) {//存放最终结果int sum = 0;int preNum = getValue(s.charAt(0));for (int i = 1; i < s.length(); i++) {int num = getValue(s.charAt(i));if (preNum < num)sum -= preNum;else sum += preNum;preNum = num;}//添加最后一个sum += preNum;return sum;}//将罗马数字转化为对应的阿拉伯数组public int getValue(char ch){switch (ch){case 'I': return 1;case 'V': return 5;case 'X': return 10;case 'L': return 50;case 'C': return 100;case 'D': return 500;case 'M': return 1000;default: return 0;}}
14.最长公共前缀

思路:我们可以先将字符串数组的第一个字符串的第一个字符与后续的字符串数组的每一个字符串的第一个字符相互比较,如果相等,就依次比较第二个,以此类推。循环结束条件:如果存在第 j 个字符不相等,就截取已经比较过的字符为最终结果,如果第一个字符串遍历完毕,都相等,则最终结果就是第一个字符串。


代码:
public String longestCommonPrefix(String[] strs) {if (strs.length==0)return "";//获取第一个字符串的长度int length = strs[0].length();//获取整个字符数组的长度,也就是字符串的个数int count = strs.length;//逐个比较for (int i = 0; i < length; i++) {char c = strs[0].charAt(i);for (int j = 1; j < count; j++) {if (i>=strs[j].length() || c!=strs[j].charAt(i))return strs[0].substring(0,i);//左闭右开}}return strs[0];}
15.三数之和

思路:题目要求输出的是一个数组的数组,我们可以用List<List<Integer>>存储,并且不能重复。我们可以先对数组进行排序,然后用双指针的方法,依次找出题目要求的三元组。
因为排好序了,为从小到大的顺序,因此,随着第一个元素的递增,第二个元素是递减的,用双指针,依次检查三个数的和0比较,如果大于0,则右指针递减;如果小于0,则左指针递增;如果等于0,则将三个数添加在存储结果中。
代码:
public List<List<Integer>> threeSum(int[] nums) {//最终返回的List集合List<List<Integer>> lists = new ArrayList<>();//如果数组的长度小于3,则返回空结果int n = nums.length;if (n < 3){return lists;}//对数组进行排序Arrays.sort(nums);for (int i = 0; i < n - 2; i++) {//如果大于0,则之后的都大于0,不可能三数之和 ==0;if (nums[i] > 0)return lists;//跳过重复值if (i > 0 && nums[i] == nums[i-1] )continue;//双指针int left = i+1;int right = n - 1;int target = -nums[i];while (left < right){if (target == nums[left]+nums[right]){List<Integer> temp = new ArrayList<>();temp.add(nums[i]);temp.add(nums[left]);temp.add(nums[right]);lists.add(temp);//去重while (left < right && nums[left] == nums[left+1])left++;while (left < right && nums[right] == nums[right-1])right--;//双指针收缩left++;right--;}else if(target < nums[left] + nums[right]){right--;}elseleft++;}}return lists;}
相关文章:
力扣HOT100 11-15
11.盛水最多的容器 思路:最大水量 底边 * 高度。较短的一边控制最大水量,因此,采用双指针的方式,左、右指针指向开始和末尾,逐个向中间移动,判断左右指针所指向的高度哪个更低,它就向中间移动一…...
深入浅出单调栈与单调队列
目录一、单调栈情形一:寻找一个数左边第一个小于它的数情形二:寻找一个数左边第一个小于它的数的下标情形三:寻找一个数右边第一个大于它的数情形四:寻找一个数右边第一个大于它的数的下标二、单调栈的应用2.1 单调栈模板题I2.2 单…...
深入C语言——实现可变参数函数
文章目录初步示例函数解析最大值函数初步示例 stdarg.h提供了C语言对可变参数的支持,先举一个简短的例子 //testStdArg.c #include <stdarg.h> #include <stdio.h>void printIntList(int N, ...){va_list args; //存放...所代表的参数va_start(…...
41-Dockerfile-Dockerfile简介
Dockerfile简介前言Dockerfile 简介基础知识使用Dockerfile 构建镜像步骤Dockerfile 构建过程Dockerfile基本结构Dockerfile示例总结前言 本篇开始来学习下Dockerfile相关的用法 Dockerfile 简介 Dockerfile : 是用来构建 Docker 镜像的文本文件,是有一条条构建镜…...
【408】操作系统 - 刻骨铭心自测题1(上)
文章目录OS练习题第一部分:1:2:3:4:5:6:7:8:9:10:11:12:13:14:15:16:17&am…...
【老卫拆书】009期:Vue+Node肩挑全栈!《Node.js+Express+MongoDB+Vue.js全栈开发实战》开箱
今天刚拿到一本新书,叫做《Node.jsExpressMongoDBVue.js全栈开发实战》,做个开箱。 外观 先从外观上讲,这本是全新的未开封的,膜还在。 这本书介绍从技术原理到整合开发实战,以丰富的项目展现全栈开发的一个技巧。 …...
【LeetCode】动态规划总结
动态规划解决的问题 动态规划和贪心的区别: 动态规划是由前一个状态推导出来的; 贪心是局部直接选最优的。 动态规划解题步骤 状态定义:确定dp数组以及下标的含义状态转移方程:确定递推公式初始条件:dp如何初始化遍历…...
CAS详解.
CAS这个机制就给实现线程安全版本的代码,提供了一个新的思路,之前通过加锁,把多个指令打包成整体,来实现线程安全。现在就可以考虑直接基与CAS来实现一些修改操作,也能保证线程安全(不需要加锁)…...
Mock.js初步使用(浏览器端)
Mock.js:生成随机数据,拦截 Ajax 请求。官方地址:http://mockjs.com/第一个demodemo.html<!DOCTYPE html> <html> <head><meta charset"utf-8"><title>mockjs demo</title> </head> <…...
opencv保存图片
大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页: lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…...
【c++】数据类型
文章目录整型实型科学计数法sizeof关键字字符型字符串类型转义字符bool布尔类型c规定在创建一个变量或者常量时,必须要指定出相应的数据类型,否则无法给变量分配内存。 整型 作用:整型变量表示的是整数类型的数据。 实型 float f3.14; //默…...
Elasticsearch的写的底层原理
前面有一篇文章讲解了Elasticsearch的读写搜索过程,有的人感觉不太理解,今天我们再来看看这些过程的原理 写数据底层原理 首先是将数据写入到内存buffer中,在这里的时候,数据是搜索不到。他同时会将数据写入到translog日志文件中…...
【网络编程】Java中的Socket
文章目录前言socket是什么?Java中的SocketJava实现网络上传文件前言 所谓Socket(套接字),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用…...
有趣的Hack-A-Sat黑掉卫星挑战赛——跟踪卫星
国家太空安全是国家安全在空间领域的表现。随着太空技术在政治、经济、军事、文化等各个领域的应用不断增加,太空已经成为国家赖以生存与发展的命脉之一,凝聚着巨大的国家利益,太空安全的重要性日益凸显[1]。而在信息化时代,太空安…...
Ubuntu安装配置Cuda和Pytorch gpu
前言 在Ubuntu中操作系统中,通过Anconda安装对应的虚拟环境以及软件包,一般都需要适配Cuda、Pytorch版本等 以下安装配置都是在Ubuntu操作系统下 1. 安装Cuda 通过Ubuntu操作系统查看cuda适配的版本:nvidia-smi 截图如下: 查看Ubuntu版本可如下方式 (1)cat /proc/ver…...
三、Java面向对象
1 . 方法 方法(method)是程序中最小的执行单元方法就是一些代码的打包 需要的时候可以直接调用方法之间是平级的关系 不能在方法里面定义方法方法不调用就不执行 方法的定义 // 方法的定义 /* [修饰符] 返回值类型 方法名称([参数 1],[参数 2]){语句A;return 返回值; } *///…...
pygame7 弹球游戏2
上节课我们做到当球静止下来后在第0号球上画一个球杆 本节课我们将会让这个球杆将球打出来 1、鼠标事件 pygame.mouse.get_pressed():返回鼠标左键,中间,右键的情况 2、键盘事件: pygame.key.get_pressed(): 返回所有键盘的情况 3、pyg…...
计算机网络4:计算机网络体系结构
目录计算机网络体系结构1.网络模型2.每一层的代表含义2.1 OSI7层模型2.2 五层协议2.3 TCP/IP 四层协议3.数据在各层之间的传输过程4.为什么要进行分层计算机网络体系结构 1.网络模型 2.每一层的代表含义 2.1 OSI7层模型 (1)物理层:比特流–…...
1630_GNU的二进制分析工具nm简单使用探索
全部学习汇总: GreyZhang/toolbox: 常用的工具使用查询,非教程,仅作为自我参考! (github.com) GNU有一套二进制的分析工具,之前是用过objdump的,但是也没有系统掌握。如果做底层软件的设计,这些…...
【Redis】Redis高可用之Redis Cluster集群模式详解(Redis专栏启动)
📫作者简介:小明java问道之路,2022年度博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建工设优化。文章内容兼具广度深度、大厂技术方案,对待技术喜欢推理加验证,就职于知名金融公…...
CANN/pypto argsort排序索引
# pypto.argsort 【免费下载链接】pypto PyPTO(发音: pai p-t-o):Parallel Tensor/Tile Operation编程范式。 项目地址: https://gitcode.com/cann/pypto 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3…...
信息安全工程师-病毒、木马、蠕虫技术原理与防御基础
一、引言 核心概念定义 恶意代码是指故意编制或设置的、对信息系统或网络产生危害的程序代码,计算机病毒、特洛伊木马、网络蠕虫是网络安全领域占比超过 80% 的核心恶意代码类型,也是软考信息安全工程师考试中恶意代码模块的核心考察内容。软考考点重要…...
【2026最新版|收藏备用】用Skill简化大模型知识库连接,小白程序员入门必看
本文专为2026年入门大模型的小白、程序员打造,详细介绍如何通过Skill技术简化大模型与外部知识库的对接流程,对比传统RAG方法的繁琐痛点,手把手讲解Markdown(.md)格式文档的存储技巧、SKILL.md文件的技能描述与导航方法…...
CANN/AMCT大模型FlatQuant量化
AMCT大模型对于LLAMA2/Qwen3的FlatQuant量化 【免费下载链接】amct AMCT是CANN提供的昇腾AI处理器亲和的模型压缩工具仓。 项目地址: https://gitcode.com/cann/amct 1 量化前提 1.1 安装依赖 本sample依赖包可参考requirements.txt 需要注意的是torch_npu包版本需要…...
OpenClaw安全审计:AI驱动的自动化配置检查与隐私保护实践
1. 项目概述与核心价值 最近在折腾我的 OpenClaw 机器人,这玩意儿功能是越来越强大了,能接各种消息渠道,还能调用五花八门的工具。但功能一多,配置就复杂,安全问题也跟着冒头。比如,你是不是也担心过 API 密…...
Nucleus Co-Op终极指南:如何让任何单机游戏变身为多人派对神器
Nucleus Co-Op终极指南:如何让任何单机游戏变身为多人派对神器 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 你是否曾经想过…...
MoE与边缘AI融合:重塑元宇宙实时内容生成新范式
1. 项目概述:当MoE遇见边缘AI,元宇宙内容生成的新引擎最近和几个做游戏和数字孪生的朋友聊天,大家普遍在头疼一个问题:元宇宙内容的生产效率。无论是构建一个沉浸式的虚拟空间,还是为AR眼镜实时生成个性化的街景导航信…...
以为再也见不到那些文件了…” 客户差点哭出来,结果数据全回来了
数据恢复常见误区与故障排查:从文件误删到硬盘异响的技术分析摘要: 在日常使用中,数据丢失常以不同形式出现——系统崩溃无法开机、硬盘发出异响、文件误删后清空回收站、服务器RAID阵列突然离线。许多用户在故障发生时因错误操作导致恢复难度…...
Q-learning算法在多市场寡头竞争中的动态演化与合谋抑制研究
1. 项目概述:当AI学会“内卷”,市场会发生什么?在经济学和计算机科学的交叉领域,有一个问题一直吸引着研究者和实践者:如果市场上的竞争者不是人类,而是不断自我学习、自我优化的智能算法,它们会…...
可解释AI 2.0:从通用工具到定制化方案的实战指南
1. 项目概述:从“黑盒”到“白盒”的进阶之路“可解释AI”这个词,现在听起来已经不新鲜了。几年前,当深度学习模型在图像识别、自然语言处理等领域大杀四方时,我们这些从业者一边惊叹于其惊人的性能,一边又对模型内部的…...
