力扣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,专注于后端、中间件、计算机底层、架构设计演进与稳定性建工设优化。文章内容兼具广度深度、大厂技术方案,对待技术喜欢推理加验证,就职于知名金融公…...
1.8 正则表达式
正则表示式是用来匹配与查找字符串的,从网上爬取数据不可避免的会用到正则表达式。 Python 的表达式要先引入 re 模块,正则表达式以 r 引导。Re库主要功能函数函数说明re.search()在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象…...
Postgresql 根据单列或几列分组去重row_number() over() partition by
Postgresql 根据单列或几列分组去重row_number() over() partition by 一般用于单列或者几列需要去重后进行计算值的 count(distinct(eid)) 可以 比如有个例子,需要根据名称,城市去筛选覆盖的道路长度,以月因为建立了唯一索引是ok的&#…...
基于蒙特卡洛法的规模化电动车有序充放电及负荷预测(PythonMatlab实现)
💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥 🎉作者研究:🏅🏅🏅主要研究方向是电力系统和智能算法、机器学…...
Selenium常用API详解,从入门到进阶(全套)
目录 1、打开页面 2、查找页面元素 3、输入文本 4、点击操作 5、提交操作 6、清除文本 7、获取文本、属性 8、获取页面的标题和URL 9、窗口 9.1、设置窗口大小 9.2、窗口切换 9.2.1、为什么需要窗口切换? 9.2.2、获取句柄的方式 9.2.3、切换句柄 10、…...
自从学会了Python,我实现了壁纸自由(6)
小朋友们好,大朋友们好!我是猫妹!哈哈哈,又到周末啦!这周过得怎么样?马上就要开学了,寒假作业早已写好了吧?开学让人兴奋,上了很久网课都要吐啦!开学也让人有…...
Ruby 发送邮件 - SMTP
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。 Ruby提供了 Net::SMTP 来发送邮件,并提供了两个方法 new 和 start: new 方法有两个参数&am…...
Python爱心代码
前言 Python漂浮爱心,具体源码见:Python动态爱心代码_爱心代码-Python文档类资源-CSDN下载 爱心类 class Heart(): #每个爱心(爱心类) def __init__(self): self.r ra.randint(10,15) #爱心的半径 …...
【二分查找法及其应用】
文章目录一. 前提二. 基本思路三. 代码实现四. 封装在STL中的二分查找算法五. 浮点数二分一. 前提 待查找的序列是有序的;待查找的 a 采取顺序存储结构。 二. 基本思路 设在升序序列 a [ low…high ] 查找的 k , 首先找中间值 mid a [ ( lowhigh )/2 …...
Android 进阶——Framework核心 之Binder Java成员类详解(三)
文章大纲引言一、Binder Java家族核心成员关系图二、Binder Java家族核心成员源码概述1、android.os.IBinder1.1、boolean transact(int code, Parcel data, Parcel reply, int flags) send a call to an IBinder object1.2、String getInterfaceDescriptor()1.3、boolean ping…...
Maven
Maven 1.什么是Maven 官方网站 https://maven.apache.org/ Maven是一款服务于Java平台的自动化构建工具,它可以帮助我们更方便的对项目进行构建、管理项目jar包 ,包括: bulid 项目,切换 jar 版本,添加 jar, 删除 jar 包等 1.…...
深圳做网站好的公司/google app
Android之应用内部实现国际化-- http://www.cnblogs.com/lee0oo0/archive/2013/07/14/3189317.html[Android]应用语言切换的三种方法-- http://blog.csdn.net/sodino/article/details/6596709Android 语言国际化-- http://blog.csdn.net/weihan1314/article/details/32327587有…...
电商平台开发报价/湖北网络推广seo
io系统的监控工具-blktrace blktrace是一个可以显示block的io详细信息的工具,但他的输出信息太专业了,很难看懂,可以同通过blkiomon、blkparse等工具来查看。下载 [rootdhdb tmp]# wget ftp://mirror.switch.ch/pool/3/mirror/centos/5.8/os/…...
网站建设相对路径/整站seo免费咨询
在《【ActionScript】使用键盘移动元件》(点击打开链接)中介绍了键盘如何与ActionScript2.0交互。本文继续介绍鼠标如何与ActionScript2.0的交互。其实鼠标与ActionScript2.0的交互在《【ActionScript】利用复制影片duplicateMovieClip与鼠标拖动跟随sta…...
京东网站建设及特点/引擎优化seo是什么
文章目录1背景介绍2 问题描述3 问题处理1背景介绍 做了个屏幕录制程序,可自选屏幕区域进行录制,保存格式可选为mp4,使用ffmpeg实现生成mp4格式文件,全屏幕录制无任何问题,自选区域录制部分情况下生成mp4文件无数据 2…...
无锡网站建设服务公司/赣州seo优化
vSphere6提示已弃用VMFS卷的解决方法参考文章: (1)vSphere6提示已弃用VMFS卷的解决方法 (2)https://www.cnblogs.com/gotopower/p/5821409.html (3)https://www.codeprj.com/blog/58d3e11.ht…...
上饶便宜的做网站公司/国家大事新闻近三天
本节书摘来自异步社区《思科数据中心I/O整合》一书中的第2章,第2.6节,作者【美】Silvano Gai , Claudio DeSanti,更多章节内容可以访问云栖社区“异步社区”公众号查看 2.6 无损耗是否更佳? 思科数据中心I/O整合这是一个复杂的话题…...