面试经典150题(21-26)

leetcode 150道题 计划花两个月时候刷完,今天(第十二天《天数乱了》)完成了6道(21-26)150:

21.(28. 找出字符串中第一个匹配项的下标) 题目描述:

给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回  -1

第一版(这个题有印象,KMP算法但是我不会,我只能写简单的版本比暴力强一点的)

class Solution {public int strStr(String haystack, String needle) {int hLen=haystack.length();int nLen=needle.length();int hIndex=0;int nIndex=0;while(hIndex<hLen&&nIndex<nLen){if(haystack.charAt(hIndex)==needle.charAt(nIndex)){hIndex++;nIndex++;}else{// 这块回退只要记住就 OKhIndex=hIndex-nIndex+1;nIndex=0;}}if(nIndex==nLen){return hIndex-nIndex;}else{return -1;}}
}

22.(125. 验证回文串) 题目描述:

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
字母和数字都属于字母数字字符。
给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false

第一版(这个题我感觉只需要知道咋判断字符是不是数字和字母就会,isLetterOrDigit(char))

class Solution {public boolean isPalindrome(String s) {s=s.toLowerCase();int left=0;int right=s.length()-1;while(left<right){while(left<right&&!Character.isLetterOrDigit(s.charAt(left))){left++;}while(left<right&&!Character.isLetterOrDigit(s.charAt(right))){right--;}if(s.charAt(left++)!=s.charAt(right--)){return false;}}return true;}
}

23.(392. 判断子序列) 题目描述:

给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace""abcde"的一个子序列,而"aec"不是)。

第一版(这个直接写)

class Solution {public boolean isSubsequence(String s, String t) {int sLen=s.length();int tLen=t.length();if(sLen>tLen){return false;}int sIndex=0;int tIndex=0;while(sIndex<sLen&&tIndex<tLen){if(s.charAt(sIndex)==t.charAt(tIndex)){sIndex++;}tIndex++;}return sIndex==sLen;}
}

24.(167. 两数之和 II - 输入有序数组)题目描述:

给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列  ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length 。
以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1 和 index2。
你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。
你所设计的解决方案必须只使用常量级的额外空间。

第一版(这个是典型的双指针题目了)

class Solution {public int[] twoSum(int[] numbers, int target) {int left=0;int right=numbers.length-1;while(left<right){int temp=numbers[left]+numbers[right];if(temp==target){return new int[]{left+1,right+1};}else if(temp<target){left++;}else{right--;}}return new int[]{};}
}

25.(11. 盛最多水的容器)题目描述:

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0)(i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
说明:你不能倾斜容器。

第一版(这个真的没想到双指针,所以我就直接暴力了,但是加了一点点优化,暴力也是过了,暴力无敌)

class Solution {public int maxArea(int[] height) {int len=height.length;// len 最小是2if(len<=1)return 0;int max=0;int maxHeight=-1;for(int i=0;i<len-1;i++){if(height[i]>maxHeight){maxHeight=height[i];}else{continue;}for(int j=i+1;j<len;j++){max=Math.max((j-i)*Math.min(height[i],height[j]),max);}}return max;}
}

第二版(看了解题,这题做了好几遍了但还是想不到双指针,我对双指针的印象停留在有序的数组上,这个是无序的但是看解题说最后是可以验证双指针是对的)

class Solution {public int maxArea(int[] height) {int len=height.length;// len 最小是2if(len<=1)return 0;int left=0;int right=len-1;int max=0;int temp=0;while(left<right){if(height[left]>height[right]){temp=height[right]*(right-left);right--;}else{temp=height[left]*(right-left);left++;}max=Math.max(temp,max);}return max;}
}

26.(15. 三数之和)题目描述:

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请
你返回所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。

第一版(这个也做了好几边,但是还是没注意题目,返回值要的值不是index,可以先排序然后就可以用双指针了,那就让大家看看我的骚操作,怎么过滤的。。)

class Solution {public List<List<Integer>> threeSum(int[] nums) {int len=nums.length;List<List<Integer>> res=new ArrayList();if(len<=1)return res;Arrays.sort(nums);Set<String> set=new HashSet();int left=1;int right=len-1;for(int i=0;i<len-2;i++){// 双指针left=i+1;right=len-1;while(left<right){int temp=nums[i]+nums[left]+nums[right];if(temp==0){StringBuilder sb=new StringBuilder();sb.append(nums[i]);sb.append(nums[left]);sb.append(nums[right]);if(set.add(sb.toString())){res.add(Arrays.asList(nums[i],nums[left],nums[right]));}left++;right--;}else if(temp>0){right--;}else{left++;}}}return res;}
}

第二版(不得不说,去重的思想很厉害)

class Solution {public List<List<Integer>> threeSum(int[] nums) {int len=nums.length;List<List<Integer>> res=new ArrayList();if(len<=2)return res;Arrays.sort(nums);int left=1;int right=len-1;for(int i=0;i<len-2;i++){// 去重if(nums[i]>0)continue;if(i!=0){if(nums[i]==nums[i-1])continue;}// 双指针left=i+1;right=len-1;while(left<right){int temp=nums[i]+nums[left]+nums[right];if(temp==0){res.add(Arrays.asList(nums[i],nums[left],nums[right]));// 去重while(left<right&&nums[left]==nums[left+1]){left++;}while(left<right&&nums[right]==nums[right-1]){right--;}left++;right--;}else if(temp>0){right--;}else{left++;}}}return res;}
}

今天这些也是之前做过的,有印象所以做的还算是快,但是有些也忘的差不多了,总之比之前有一点点的提升,至少暴力求解能写出来了。

唉,最近又开始被催着相亲了,真不知道说什么。。直男的痛苦啊,真的想一句话,我真的能想一个小时,感觉比算法题还难。。
加油早日跳槽!!!

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

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

相关文章

[RTOS移植]--STM32F767移植RTThread

文章目录 通过STM32cube创建一个工程选择要移植的RTOS源下载到本地如果没有重启软件选择对应配置后续补充 通过STM32cube创建一个工程 选择要移植的RTOS源 下载到本地 如果没有重启软件 选择对应配置 Build started: Project: STM32F767 *** Using Compiler V5.06 update 7 (b…

淘宝类目信息API接口获取淘宝商品分类信息API调用说明(含APIkey密钥)

cat_get-获得淘宝分类详情 item_cat_get-获得淘宝商品类目 公共参数 名称类型必须描述keyString是调用key&#xff08;点此获取&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,item_search_…

Redis-数据结构

参考资料 极客时间Redis&#xff08;亚风&#xff09; Redis数据结构 SDS sds(Simple Dynamic String) 字符串接结构体: struct --attribute_- ((-_packed__)) sdshdr8{uint8_t len&#xff1b;/* buf已保祥的字符串字节数&#xff0c;不包含结束标示*/uint8_t alloc&#…

ArrayList和LinkedList区别

目录 一、性质不同 二、作用不同 三、特点不同 一、性质不同 1、arraylist&#xff1a;ArrayList就是动态数组&#xff0c;用MSDN中的说法&#xff0c;就是Array的复杂版本。 2、linkedlist&#xff1a;LinkedList 是一个继承于AbstractSequentialList的双向链表。 二、作…

Hadoop分布式配置小白篇(附加各阶段问题解决方式)

看的黑马的课&#xff0c;记录一下配置步骤 目录 1.VMware安装&#xff1a; 方法1&#xff1a; 方法2&#xff1a; 2.创建虚拟机 1.ISO镜像文件获取&#xff08;CentOS&#xff09;&#xff1a; 2.创建&#xff08;简略步骤&#xff09; 3.克隆虚拟机&#xff08;克隆伪…

nodejs+vue+微信小程序+python+PHP运动项目推荐系统-计算机毕业设计推荐

运动项目推荐系统的整体架构确定以后&#xff0c;再来看运动项目推荐系统的主要功能模块图。整体的功能模块包括前台和后台&#xff0c;前台只要实现了注册用户功能&#xff0c;主要的页面&#xff0c;包括首页&#xff0c;体育资讯&#xff0c;体育项目&#xff0c;公告信息等…

爬虫框架beautifulsoup详解

CSS 选择器&#xff1a;BeautifulSoup4 和 lxml 一样&#xff0c;Beautiful Soup 也是一个HTML/XML的解析器&#xff0c;主要的功能也是如何解析和提取 HTML/XML 数据。 lxml 只会局部遍历&#xff0c;而Beautiful Soup 是基于HTML DOM的&#xff0c;会载入整个文档&#xff0…

论文润色优化讨论部分 PaperBERT

大家好&#xff0c;今天来聊聊论文润色优化讨论部分&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 标题&#xff1a;论文润色优化讨论部分――提升论文深度与影响力的关键…

IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Spring中自动装配和中注解

第一章 Spring中自动装配【基于XML】 1.1 Spring中提供两种装配方式 手动装配自动装配 1.2 Spring自动装配语法及规则 在bean标签中添加属性&#xff1a;Autowire即可 byName&#xff1a;对象中属性名称与容器中的beanId进行匹配&#xff0c;如果属性名与beanId数值一致&…

复盘理解/实验报告梳理 数据结构PTA实验一

新系列&#xff01;&#xff01;&#xff01; 由于要写数据结构实验&#xff0c;所以我需要重新梳理一下我前面写过的实验题&#xff0c;顺便写一个综合性较强的博文&#xff0c;针对实验报告中的“调试过程”内容进行复盘&#xff0c;方便复习。 一、约瑟夫环 此题内容是对于…

方差分析实例

目录 方差分析步骤 相关概念 基本思想 随机误差 系统误差 组内方差 组间方差 方差的比较 方差分析的前提 1.每个总体都应服从正态分布 2.各个总体的方差必须相同 3.观察值是独立的 原假设成立 备择假设成立 单因素方差分析 提出假设 检验的统计量 水平的均值…

基于JSP+Servlet+Mysql的建设工程监管信息

基于JSPServletMysql的建设工程监管信息 一、系统介绍二、功能展示1.企业信息列表2.录入项目信息3.项目信息列表 四、其它1.其他系统实现五.获取源码 一、系统介绍 项目名称&#xff1a;基于JSPServlet的建设工程监管信息 项目架构&#xff1a;B/S架构 开发语言&#xff1a;…

最大距离。

题目描述 在数列a,a2,,an中&#xff0c;定义两个元素ai和a;的距离为i-jai-a&#xff0c;即元素下标的距离加上元素值的差的绝对值&#xff0c;其中表示e的绝对值 给定一个数列&#xff0c;请问找出元素之间最大的元素距离输入描述 输入的第一行包含一个整数n。 第二行包含n个整…

2312llvm,读写位码

如何读写LLVM位码 首先,看看一些高级LLVM术语: 1,LLVM对用户代码的主要抽象是模块.它是一个包含用户编写的所有函数,全局变量和指令的类. 2,Bitcode文件是LLVM模块的序化,以便以后可在不同程序中重建它. 3,LLVM使用MemoryBuffer对象来处理文件,stdin或数组等数据. 示例中,使用…

漏刻有时数据可视化Echarts组件开发(44)提示框组件与返回多边形

CSS样式表 #lock_box {padding: 0;margin: 0;height: 100%;width: 100%;}.tipsBox {background: transparent url("images/tipsbg.png") top center no-repeat;width: 260px;height: 203px;box-shadow: none;}.tipsBox > p:first-child {padding-left: 35px;font…

git的安装及使用

git的安装及使用 git的安装 官网地址&#xff1a;https://git-scm.com/download/win 在任何位置输入bash或sh,进入git 设置用户名邮箱。 git config --global user.name “wfyfly” git config --global user.email 2423217861qq.com 查看配置信息 git config --list --globa…

C++核心编程思路(1):①程序的内存模型②引用的作用

文章目录 前言一、不同的存储类型变量&#xff0c;会被存储在什么区&#xff1f;①const修饰的局部变量放在栈区&#xff0c;全局变量放在只读数据区。②static修饰的全局和局部变量都放在静态区&#xff08;即数据区中的一个小区&#xff09; 二、栈区1.如果在函数A中定义了一…

基于SpringBoot和微信小程序的农场信息管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot和微信小程序的农场信息管…

2019年AMC8数学竞赛真题的典型考点和详细解析

从战争中学习战争。 对于2024年1月19日的AMC8竞赛&#xff0c;最后一个月的时间如何备考和冲刺取得更好的成绩&#xff1f;很多高分考生的经验是刷真题&#xff0c;查漏补缺。那么如何提高刷真题的效率呢&#xff1f;使用六分成长独家制作的在线真题集练习是个不错的方式&…

基于linux系统的Tomcat+Mysql+Jdk环境搭建(四)linux安装Mysql

1.切换到你需要安装mysql的路径 cd /root/usr/ 2.在线安装 安装网上的安装方式都有很多&#xff0c;可以自己百度一下 我们这里是自己搭建测试环境&#xff0c;可以直接选择在线安装&#xff0c;命令如下&#xff1a;yum install mysql-server&#xff0c; 但是我失败了 ┭┮…