当前位置: 首页 > news >正文

面试经典150题(15-19)

leetcode 150道题 计划花两个月时候刷完,今天(第七天)完成了5道(15-19)150:

今天这些都是我之前做过的,还有就是今天的全都是模拟过程。。所以做的还算快。

15(13. 罗马数字转整数)

题目描述:

罗马数字包含以下七种字符: I, V, X, L,C,D 和 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) 的左边,来表示 49。
X 可以放在 L (50) 和 C (100) 的左边,来表示 4090。 
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400900。
给定一个罗马数字,将其转换成整数。

第一版(直接模拟过程了,没有啥算法,没有啥技术含量。。想不出来更好的)

class Solution {public int romanToInt(String s) {int len=s.length();int index=0;int sum=0;while(index<len){if(s.charAt(index)=='I'){if(index+1<len&&s.charAt(index+1)=='V'){sum+=4;index++;}  else if(index+1<len&&s.charAt(index+1)=='X'){sum+=9;index++;}else{sum+=1;}     }else if(s.charAt(index)=='X'){if(index+1<len&&s.charAt(index+1)=='L'){sum+=40;index++;}  else if(index+1<len&&s.charAt(index+1)=='C'){sum+=90;index++;}else{sum+=10;}     }else if(s.charAt(index)=='C'){if(index+1<len&&s.charAt(index+1)=='D'){sum+=400;index++;}  else if(index+1<len&&s.charAt(index+1)=='M'){sum+=900;index++;}else{sum+=100;} }else if(s.charAt(index)=='V'){sum+=5;}else if(s.charAt(index)=='L'){sum+=50;}else if(s.charAt(index)=='D'){sum+=500;}else if(s.charAt(index)=='M'){sum+=1000;}index++;}return sum;}
}

16 (12. 整数转罗马数字)

题目描述:
和上面这个一样 这个是数字转罗马数字:数字范围为:
1 <= num <= 3999
第一版:(还是模拟过程反着来,但是这个是leetcode中等题。。上面的是简单题)

class Solution {public String intToRoman(int num) {StringBuilder sb=new StringBuilder();while(num!=0){if(num>=1000){int qNum=num/1000;for(int i=0;i<qNum;i++){sb.append("M");}num%=1000;}else if(num>=100){int bNum=num/100;if(bNum==9){sb.append("CM");bNum-=9;}if(bNum>=5){sb.append("D");bNum-=5;}if(bNum==4){sb.append("CD");bNum-=4;}for(int i=0;i<bNum;i++){sb.append("C");}num%=100;}else if(num>=10){int sNum=num/10;if(sNum==9){sb.append("XC");sNum-=9;}if(sNum>=5){sb.append("L");sNum-=5;}if(sNum==4){sb.append("XL");sNum-=4;}for(int i=0;i<sNum;i++){sb.append("X");}num%=10;}else if(num>=1){if(num==9){sb.append("IX");num-=9;}if(num>=5){sb.append("V");num-=5;}if(num==4){sb.append("IV");num-=4;}for(int i=0;i<num;i++){sb.append("I");}break;}}return sb.toString();}
}

17 (58. 最后一个单词的长度)

题目描述:

给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。
单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。

第一版(这题我一看,很快,很快啊 直接 split 然后return 哈哈哈,但是一看解题意思要自己写。。)

class Solution {public int lengthOfLastWord(String s) {String[] strs=s.trim().split(" ");return strs[strs.length-1].length();}
}

第二版(算是自己写版,其实没必要都有接口了直接用多好,希望笔试时候出题人也能这样想。。)

class Solution {public int lengthOfLastWord(String s) {char[] chars=s.toCharArray();int index=chars.length-1;int len=0;while(index>=0){if(chars[index]!=' '){break;}index--;}while(index>=0){if(chars[index--]!=' '){len++;}else{break;}}return len;}
}

18 (14. 最长公共前缀)

题目描述:

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""

这个题我知道有个横向和纵向的,但是每次想不到横向的。。。
第一版(纵向的也是好想到的)

class Solution {public String longestCommonPrefix(String[] strs) {if(strs.length<=1){return strs[0];}for(int i=0;i<strs[0].length();i++){char temp=strs[0].charAt(i);for(int j=1;j<strs.length;j++){if(i==strs[j].length()||strs[j].charAt(i)!=temp){return strs[0].substring(0,i);}}}return strs[0];}
}

第二版(横向的,我感觉有种逆思维的感觉,不是每次能想出来,他是用其中一个去和剩下的求最长公共序列,然后再用求出来公共序列再去和剩下的求,想法很好但不是很好想)

class Solution {public String longestCommonPrefix(String[] strs) {// 在写一下横向的 每次都想不起来横向的if(strs==null||strs.length<=0){return "";}int count=strs.length;if(count==1){return strs[0];}String preString=strs[0];for(int i=1;i<count;i++){preString=commonPrefix(preString,strs[i]);if(preString.length()==0){return preString;}}return preString;}public String commonPrefix(String str1,String str2) {int len1=str1.length();int len2=str2.length();int index=0;while(index<len1&&index<len2&&str1.charAt(index)==str2.charAt(index)){index++;}return str1.substring(0,index);}
}

19 (151. 反转字符串中的单词)题目描述:

给你一个字符串 s ,请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

第一版(这个题也有种让自己去实现已经有的api,我只写了一版,没有写自己实现的api…感觉太麻烦了有就用就行了。。)

class Solution {public String reverseWords(String s) {String[] strs=s.trim().split(" ");int len=strs.length;List<String> temp=new ArrayList();for(int i=len-1;i>=0;i--){if(!"".equals(strs[i])){temp.add(strs[i]);}}// 这个方法真的用的时候很多。。return String.join(" ",temp);}
}

加油早点跳槽!!今天就是把之前写过的回顾了一边,还行简单的没忘。。哦,我没有写困难的题目。。
早日跳槽!!

相关文章:

面试经典150题(15-19)

leetcode 150道题 计划花两个月时候刷完&#xff0c;今天&#xff08;第七天&#xff09;完成了5道(15-19)150&#xff1a; 今天这些都是我之前做过的&#xff0c;还有就是今天的全都是模拟过程。。所以做的还算快。 15&#xff08;13. 罗马数字转整数&#xff09; 题目描述&a…...

Linux下的网络服务

一般来说&#xff0c;各种操作系统在网络方面的性能比较是这样的顺序BSD>Linux>Win NT>Win 9X, 由此说来&#xff0c;Linux的网络功能仅次于UNIX&#xff0c;而强于Win NT和其它的视窗系列产品&#xff0c;对于Win2000我还不能评价太多&#xff0c;因为不是很熟。 Lin…...

制造业对于IT软硬件监控和摄像头故障监控的需求

制造业对于生产线的自动化和智能化需求较高&#xff0c;IT监控运维管理软件在制造业的应用也日益普及。监控易为制造业提供了一系列定制化的解决方案&#xff0c;助力企业实现生产线的智能化和高效化。 随着制造业的数字化转型和智能化升级&#xff0c;IT运维管理软件的需求也在…...

idea一些报错

java: 非法字符: \ufeff 使用IDEA修改文件编码 在IDEA右下角&#xff0c;将编码改为GBK&#xff0c;再转为UTF-8&#xff0c;重新启动项目。具体步骤如下&#xff1a; 在IDEA右下角找到UTF-8字样的编码格式设计项&#xff0c;点击选择第一项GBK&#xff0c;然后Convert&#xf…...

【Java系列】详解多线程(二)——Thread类及常见方法(上篇)

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【Java系列专栏】【JaveEE学习专栏】 本专栏旨在分享学习Java的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 一…...

Android Dialog 弹出时,隐藏 navigation bar

1、概述 一些场合&#xff0c;要求界面是全屏的&#xff0c;然而在全屏界面下&#xff0c;弹出dialog 又会导致虚拟按键栏重新弹出来&#xff0c;也是比较难受的。(而且查了非常多方法都是不能完美的解决这个问题&#xff0c;要么是压根不能用&#xff0c;要么是会闪一下虚拟栏…...

LeetCode(Hot100)——1:两数之和

方法1&#xff1a;暴力求解 利用两次for循环来处理&#xff0c; 外循环确定一个数字&#xff0c; 利用内循环不断求和来判断是否两数之和为target&#xff0c;来进行求解。 public class LeetCode1 {Test//测试方法public void test() {int [] nums{2,7,11,15};int target9;/…...

【Qt】报错error:undefined reference to `vtable for Consumer‘的解决方法

1. 问题原因 在创建完程序后&#xff0c;点击构建&#xff0c;显示编译错误。 错误问题如下: error: undefined reference to vtable在编译输出中查看显示如下&#xff1a; error:undefined reference to vtable for custom2. 原因分析 这个错误通常是因为 C 的虚函数表&am…...

【linux系统】用户功能与权限详细总结

前言 菜某的笔记总结&#xff0c;有错误还请指正。 linux用户的概念与root用户 这么理解&#xff1a;一台电脑有多个操作者&#xff0c;每个操作者只能无限制操作自己文件夹中的东西&#xff0c;其他地方的操作需要给与相应权限才能操作。 root用户&#xff1a;就是最高级的…...

ELK简单介绍二

学习目标 能够部署kibana并连接elasticsearch集群能够通过kibana查看elasticsearch索引信息知道用filebeat收集日志相对于logstash的优点能够安装filebeat能够使用filebeat收集日志并传输给logstash kibana kibana介绍 Kibana是一个开源的可视化平台,可以为ElasticSearch集群…...

video 标签 各种属性及所有事件监听

网页中的video 属性和事件&#xff0c;用于计算观看视频的时长&#xff0c;其他用法备存。 <!-- video 不支持 IE8及以下版本浏览器&#xff0c;支持三种视频格式&#xff1a;MP4&#xff0c;WebM 和 Ogg --><video src"test.mp4" controls width"400…...

TS中断言、转换的应用

1.TS 类型断言定义 把两种能有重叠关系的数据类型进行相互转换的一种 TS 语法&#xff0c;把其中的一种数据类型转换成另外一种数据类型。类型断言和类型转换产生的效果一样&#xff0c;但语法格式不同。 2.TS 类型断言语法格式 A 数据类型的变量 as B 数据类型 。 A 数据类…...

【代码随想录算法训练营-第四天】【链表】24,19, 面试题 02.07,142

24. 两两交换链表中的节点 第一遍-递归-小看了一下题解 思路&#xff1a; 读了两遍题目才理解…相邻节点的交换&#xff0c;这个操作很容易实现&#xff0c;但需要一个tmpNode因为是链表的题目&#xff0c;没开始思考之前先加了dummyNode&#xff0c;还真管用把dummyNode作为…...

代理设计模式

1. 代理模式 1.1 代理模式的原理分析 代理设计模式&#xff08;Proxy Design Pattern&#xff09;是一种结构型设计模式&#xff0c;它为其他对象提供一个代理对象&#xff0c;以控制对这个对象的访问。代理模式可以用于实现懒加载、安全访问控制、日志记录等功能。 代理模式…...

ubuntu安装docker及docker常用命令

docker里有三个部分 daemon 镜像 和 容器 我们需要了解的概念 容器 镜像 数据卷 文章目录 docker命令docker镜像相关命令docker容器相关命令数据卷ubuntu安装docker docker命令 #启动&#xff0c;停止&#xff0c;重启docker systemctl start docker systemctl stop docker s…...

STM32-TIM定时器输出比较

目录 一、输出比较简介 二、PWM简介 三、输出比较通道&#xff08;通用&#xff09; 四、输出比较通道&#xff08;高级&#xff09; 五、输出比较模式 六、PWM基本结构 七、PWM参数计算 八、外设介绍 8.1 舵机 8.2 直流电机及驱动 九、开发步骤 十、输出比较库函数…...

《Easy3d+Qt+VTK》学习

《Easy3dQtVTK》学习-1、编译与配置 一、编译二、配置注 一、编译 1、 资源下载&#xff1a;easy3d giuhub 2、解压缩 3、用qt打开CMakeLists.txt即可 4、点击项目&#xff0c;选择debug或者release&#xff0c;图中3处可自行选择&#xff0c;因为我的qt版本是6&#xff0c…...

多平台展示预约的服装小程序效果如何

线下实体服装店非常多&#xff0c;主要以同城生意为主&#xff0c;但随着电商经济增长&#xff0c;传统线下自然流量变少&#xff0c;商家们会选择线上入驻平台开店获得更多线上用户&#xff0c;包括自建私域小程序等。 而除了直接卖货外&#xff0c;线上展示预约在服装行业也…...

Gti GUI添加标签

通过Git Gui打开项目&#xff0c;通过菜单打开分支历史&#xff0c;我这里是名为"develop"的分支 选中需要打标签的commit&#xff0c;右键-Create tag即可 但貌似无法删除标签&#xff0c;只能通过git bash&#xff0c;本地标签通过git tag -d tagname&#xff0c;…...

高云GW1NSR-4C开发板M3硬核应用

1.M3硬核IP下载&#xff1a;Embedded M3 Hard Core in GW1NS-4C - 科技 - 广东高云半导体科技股份有限公司 (gowinsemi.com.cn) 特别说明&#xff1a;IDE必须是1.9.9及以后版本&#xff0c;1.9.8会导致编译失败&#xff08;1.9.8下1.1.3版本IP核可用&#xff09; 以下根据官方…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...