力扣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,专注于后端、中间件、计算机底层、架构设计演进与稳定性建工设优化。文章内容兼具广度深度、大厂技术方案,对待技术喜欢推理加验证,就职于知名金融公…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...

深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...

热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁
赛门铁克威胁猎手团队最新报告披露,数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据,严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能,但SEMR…...
Linux安全加固:从攻防视角构建系统免疫
Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...

react菜单,动态绑定点击事件,菜单分离出去单独的js文件,Ant框架
1、菜单文件treeTop.js // 顶部菜单 import { AppstoreOutlined, SettingOutlined } from ant-design/icons; // 定义菜单项数据 const treeTop [{label: Docker管理,key: 1,icon: <AppstoreOutlined />,url:"/docker/index"},{label: 权限管理,key: 2,icon:…...

循环语句之while
While语句包括一个循环条件和一段代码块,只要条件为真,就不断 循环执行代码块。 1 2 3 while (条件) { 语句 ; } var i 0; while (i < 100) {console.log(i 当前为: i); i i 1; } 下面的例子是一个无限循环,因…...