DAY3-力扣刷题

1.罗马数字转整数

13. 罗马数字转整数 - 力扣(LeetCode)

罗马数字包含以下七种字符: I, V, X, LCD 和 M

字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

  • I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
  • X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 
  • C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。

给定一个罗马数字,将其转换成整数。

//这个题需要找规律

class Solution {public static int romanToInt(String s) {HashMap<Character,Integer> hashMap=new HashMap<>();hashMap.put('I',1);hashMap.put('V',5);hashMap.put('X',10);hashMap.put('L',50);hashMap.put('C',100);hashMap.put('D',500);hashMap.put('M',1000);Integer length=s.length();Integer sum=0;for (int i=0;i<s.length();i++){char ch=s.charAt(i);int value=hashMap.get(ch);if(i<length-1&&value<hashMap.get(s.charAt(i+1))){sum=sum-value;}else {sum=sum+value;}//特殊情况//IV:4 IX:9//XL:40 XC:90//CD:400 CM:900}return sum;}}

 找规律看清楚题目很重要

2.最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""

示例 1:

输入:strs = ["flower","flow","flight"]
输出:"fl"

示例 2:

输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。

14. 最长公共前缀 - 力扣(LeetCode)

class Solution2 {public static String longestCommonPrefix(String[] strs) {if(strs==null||strs.length==0){return "";}int length=strs.length;for(int i=0;i<strs[0].length();i++){//第一个字符串的截止范围char ch=strs[0].charAt(i);//字符串的第一个字母for(int j=1;j<length;j++){//和每一个字符串是否匹配if(i==strs[j].length()||strs[j].charAt(i)!=ch){//弹出的条件return strs[0].substring(0,i);}}}return strs[0];}
}

3.三数之和

15. 三数之和 - 力扣(LeetCode)

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != ji != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

下题解有重复的结果 

class Solution3 {public static List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> list=new ArrayList<>();int length=nums.length;for(int i=0;i<length-2;i++){for(int j=i+1;j<length-1;j++){for(int z=j+1;z<length;z++){int sum=nums[i]+nums[j]+nums[z];if(sum==0){List<Integer> ls=new ArrayList<>();ls.add(nums[i]);ls.add(nums[j]);ls.add(nums[z]);list.add(ls);}}}}return list;}
}

 方法一:排序 + 双指针

class Solution {public static List<List<Integer>> threeSum(int[] nums) {int n=nums.length;//把数组从大到小进行排序Arrays.sort(nums);List<List<Integer>> ans = new ArrayList<List<Integer>>();//枚举a,b,c//其实就是三层循环//枚举abc//不能出现bac//所以需要将数组从大到小进行排序//同时已经有了abc,再出现a需要跳出循环for(int first=0;first<n;first++){//需要和上一次的枚举有所不同if(first>0&&nums[first]==nums[first-1]){continue;//跳出循环}//a是一层循环//bc左右双指针进行遍历//c对应的指针初始指向数组的最右端int third=n-1;int target=-nums[first];//b,c之和需要是targetfor(int second=first+1;second<n;second++){//同样需要和上一次枚举的数有所不同if(second>first+1&&nums[second]==nums[second-1]){continue;}//需要保证b的指针在c的指针的左侧while(second<third&&nums[second]+nums[third]>target){--third;}// 如果指针重合,随着 b 后续的增加// 就不会有满足 a+b+c=0 并且 b<c 的 c 了,可以退出循环if (second == third) {break;//跳出本层循环}if (nums[second] + nums[third] == target) {List<Integer> list = new ArrayList<Integer>();list.add(nums[first]);list.add(nums[second]);list.add(nums[third]);ans.add(list);}}}return ans;}}

4.最接近的三数之和 

16. 最接近的三数之和 - 力扣(LeetCode)

学会使用while循环

给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。

返回这三个数的和。

假定每组输入只存在恰好一个解。

超出时间限制

class Solution {public static int threeSumClosest(int[] nums, int target) {int sumsave = Integer.MAX_VALUE;int absave = Integer.MAX_VALUE;// 同样是将数组进行排序// 排序是从小到大进行排序的Arrays.sort(nums);// 1.如果第一层有一个数组大于target,它的下一个我们便结束遍历for (int first = 0; first < nums.length; first++) {// 跳出第一层循环的时刻// 同时不用a,b,c中的a是相同的if (first > 0 && nums[first] == nums[first - 1]) {continue;// 跳出本层循环}if (first > 1 && nums[first - 1] > target) {break;// 直接跳出整个循环}int third = nums.length - 1;int second = first + 1;// 同样是左右指针for (second = first + 1; second < nums.length; second++) {if (second > first + 1 && nums[second] == nums[second - 1]) {continue;// 跳出本层循环}if (second > first + 1 && nums[second - 1] > target) {break;// 直接跳出整个循环}while (second < third) {int sum = nums[third] + nums[second] + nums[first];int abs = Math.abs(sum - target);// abs需要最小的时刻if (abs==0) {return sum;} else if (abs < absave) {sumsave = sum;absave = abs;third--;} }}}return sumsave;}
}
class Solution {public static int threeSumClosest(int[] nums, int target) {int sumsave = Integer.MAX_VALUE;int absave = Integer.MAX_VALUE;// 同样是将数组进行排序// 排序是从小到大进行排序的Arrays.sort(nums);// 1.如果第一层有一个数组大于target,它的下一个我们便结束遍历for (int first = 0; first < nums.length; first++) {// 跳出第一层循环的时刻// 同时不用a,b,c中的a是相同的if (first > 0 && nums[first] == nums[first - 1]) {continue;// 跳出本层循环}if (first > 1 && nums[first - 1] > target) {break;// 直接跳出整个循环}int third = nums.length - 1;int second = first + 1;/*// 同样是左右指针for (second = first + 1; second < nums.length; second++) {if (second > first + 1 && nums[second] == nums[second - 1]) {continue;// 跳出本层循环}if (second > first + 1 && nums[second - 1] > target) {break;// 直接跳出整个循环}while (second < third) {int sum = nums[third] + nums[second] + nums[first];int abs = Math.abs(sum - target);// abs需要最小的时刻if (abs == absave) {return sumsave;} else if (abs < absave) {sumsave = sum;absave = abs;third--;} else {break;}}}*///左右指针while (second<third){//如果target大了右指针向左//如果target小了做指针向右int sum = nums[third] + nums[second] + nums[first];int abs = Math.abs(sum - target);// abs需要最小的时刻if (sum==target) {sumsave=sum;return sumsave;}else if(sum<target){if(absave>abs){absave=abs;sumsave=sum;}second++;}else if(sum>target){if(absave>abs){absave=abs;sumsave=sum;}third--;}}}return sumsave;}
}

5.电话号码和字母组合(有问题)

17. 电话号码的字母组合 - 力扣(LeetCode)

//实现递归

class Solution {public List<String> letterCombinations(String digits) {List<String> combinations = new ArrayList<String>();if (digits.length() == 0) {return combinations;}Map<Character, String> phoneMap = new HashMap<Character, String>() {{put('2', "abc");put('3', "def");put('4', "ghi");put('5', "jkl");put('6', "mno");put('7', "pqrs");put('8', "tuv");put('9', "wxyz");}};backtrack(combinations, phoneMap, digits, 0, new StringBuffer());return combinations;}public void backtrack(List<String> combinations, Map<Character, String> phoneMap, String digits, int index, StringBuffer combination) {if (index == digits.length()) {combinations.add(combination.toString());} else {char digit = digits.charAt(index);String letters = phoneMap.get(digit);int lettersCount = letters.length();for (int i = 0; i < lettersCount; i++) {combination.append(letters.charAt(i));backtrack(combinations, phoneMap, digits, index + 1, combination);combination.deleteCharAt(index);}}}
}

//不加入该语句时

//combination.deleteCharAt(index);

//递归过程
//先经历了一层循环,即就是每个字母字符串的大小
//1.
//a
//d
//然后将字符串加入list中
//一层遍历结束后,需要删除第digit遍历的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/350928.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最长不下降子序列LIS详解

最长不下降子序列指的是在一个数字序列中&#xff0c;找到一个最长的子序列&#xff08;可以不连续&#xff09;&#xff0c;使得这个子序列是不下降&#xff08;非递减&#xff09;的。 假如&#xff0c;现有序列A[1&#xff0c;2&#xff0c;3&#xff0c;-1&#xff0c;-2&…

16.大模型分布式训练框架 Microsoft DeepSpeed

微调、预训练显存对比占用 预训练LLaMA2-7B模型需要多少显存&#xff1f; 假设以bf16混合精度预训练 LLaMA2-7B模型&#xff0c;需要近120GB显存。即使A100/H100&#xff08;80GB&#xff09;单卡也无法支持。 为何比 QLoRA多了100GB&#xff1f;不妨展开计算下显存占用&…

誉天教育近期开班计划(6月15日更新)

云计算HCIP 周末班 2024/6/15 田老师 售前IP-L3 周末班 2024/6/15 陈老师 RHCA442 晚班 2024/6/17邹老师 数通HCIE 晚班 2024/6/24阮老师 云计算HCIE直通车晚班 2024/6/25 曾老师 售前IT-L3 周末班 2024/6/29 伍老师 数通HCIP 晚班 2024/7/1杨老师 存储直通车 晚班 2024/7/1 高…

从ES的JVM配置起步思考JVM常见参数优化

目录 一、真实查看参数 &#xff08;一&#xff09;-XX:PrintCommandLineFlags &#xff08;二&#xff09;-XX:PrintFlagsFinal 二、堆空间的配置 &#xff08;一&#xff09;默认配置 &#xff08;二&#xff09;配置Elasticsearch堆内存时&#xff0c;将初始大小设置为…

Windows Server 2008 r2 IIS .NET

Windows Server 2008 r2 IIS .NET

CleanMyMacX4.15.4如何优化苹果电脑系统缓存,告别MacBook卡顿,提升mac电脑性能

你是否曾为苹果电脑存储空间不够而烦恼&#xff1f;是否曾因系统运行缓慢而苦恼&#xff1f;别担心&#xff0c;今天我要给大家种草一个神器——CleanMyMac&#xff01;这款软件可以帮助你轻松解决苹果电脑的种种问题&#xff0c;让你的电脑焕然一新&#xff01; 让我来给大家介…

springboot原理篇-配置优先级

springboot原理篇-配置优先级&#xff08;一&#xff09; springboot项目一个支持三种配置文件 application.propertiesapplication.ymlapplication.yaml 其中&#xff0c;优先级的顺序是&#xff1a; application.properties > application.yml > application.yaml 也…

基于Nios-II实现流水灯

基于Nios-II实现流水灯的主要原理 涉及到FPGA&#xff08;现场可编程门阵列&#xff09;上的嵌入式软核处理器Nios II与LED控制逻辑的结合。以下是详细的实现原理&#xff0c;分点表示并归纳&#xff1a; Nios II软核处理器介绍&#xff1a; Nios II是Altera公司推出的一种应用…

Vue笔记(二)

Vue&#xff08;一&#xff09;&#xff1a;Vue笔记&#xff08;一&#xff09;-CSDN博客 目录 综合案例&#xff1a;水果购物车 生命周期 1.生命周期&生命周期四个阶段 2.生命周期函数&#xff08;钩子函数【8个】&#xff09; 3.生命周期两个案例 初始化渲染 自动获…

Node.js和npm的安装及配置

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞 I/O 的模型。 npm&#xff08;node package manager&#xff09;是一个 Node.js 包管理和分发工具&#xff0c;也是整个 Node.js 社区最流行、支持第三方模块最多的包管理器。使…

2024.6.14 作业 xyt

使用手动连接&#xff0c;将登录框中的取消按钮使用第二中连接方式&#xff0c;右击转到槽&#xff0c;在该槽函数中&#xff0c;调用关闭函数 将登录按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c…

Unity2D计算两个物体的距离

1.首先新建一个场景并添加2个物体 2.创建一个脚本并编写代码 using UnityEngine;public class text2: MonoBehaviour {public GameObject gameObject1; // 第一个物体public GameObject gameObject2; // 第二个物体void Update(){// 计算两个物体之间的距离float distance Vec…

学习笔记——网络管理与运维——SNMP(SNMP架构)

三、SNMP架构 1、SNMP结构概述 SNMP被设计为工作在TCP/IP协议族上&#xff0c;基于TCP/IP协议工作&#xff0c;对网络中支持SNMP协议的设备进行管理。所有支持SNMP协议的设备都提供SNMP这个统一界面&#xff0c;使得管理员可以使用统一的操作进行管理&#xff0c;而不必理会设…

课设--学生成绩管理系统(一)

欢迎来到 Papicatch的博客 文章目录 &#x1f349;技术核心 &#x1f349;引言 &#x1f348;标识 &#x1f348;背景 &#x1f348;项目概述 &#x1f348; 文档概述 &#x1f349;可行性分析的前提 &#x1f348;项目的要求 &#x1f348;项目的目标 &#x1f348;…

高才通通过后,香港身份证办理

高才通通过后&#xff0c;到香港前需要准备 身份证办理预约&#xff08;流程见下面&#xff09;办理好D签&#xff1a;在入境前&#xff0c;根据入境处给的签证&#xff0c;下载签证并办理港澳通行证D签&#xff08;逗留签&#xff09;携带的文书&#xff1a;港澳通行证&#…

九、BGP路由属性和选路

目录 一、属性分类 1.1、公认属性 1.2、可选属性 二、选路原则 0、丢弃不可达 取值越大越优 1、Preferred-Value 2、Local_Preference 取值越小越优 3、路由优先级 4、AS_Path 5、Origin 6、MED 7、路由来源 8、Next_Hop的IGP度量值 BGP路由等价负载分担&#…

音频处理软件adobe audition使用教程

教程1笔记 基本操作 点击文件-》新建-》多轨会话&#xff1a; 编辑-》首选项&#xff0c;设置自动保存时间&#xff1a; 导入素材&#xff0c;文件-》导入素材&#xff0c;或者直接拖动进来文件&#xff01; 导出多轨混音&#xff1a; 更改为需要导出的格式wav,mp3等格式&am…

探索开源世界:2024年值得关注的热门开源项目推荐

文章目录 每日一句正能量前言GitCode成立背景如何使用GitCode如何把你现有的项目迁移至 GitCode&#xff1f;热门开源项目推荐actions-poetry - 管理 Python 依赖项的 GitLab CI/CD 工具项目概述技术分析应用场景特点项目地址 Spider - 网络爬虫框架项目简介技术分析应用场景项…

餐厅点餐系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;商品管理&#xff0c;用户管理&#xff0c;店家管理&#xff0c;广告管理 店家账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;商品管理&#xff0c;广告管…

机器学习:GANs网络在图像和视频技术中的应用前景

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…