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

小白水平理解面试经典题目LeetCode 594 Longest Harmonious Subsequence(最大和谐字符串)

594 最大和谐字符串

这道题属于字符串类型题目,解决的办法还是有很多的,暴力算法,二分法,双指针等等。

题目描述

和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。

现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度。

数组的子序列是一个由数组派生出来的序列,它可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。

在这里插入图片描述

这题一上来描述贼多,例子给的是比较简单的。直接扔出两个例子让你理解,好了,是看着好像是简单的字符串一类。遥想当年还是在大学,坐在教室后排在上听着年老的大学教授讲着C++与字符串是多么的犯困😪,倚着头看着心仪班花的时候。。。啪!继续看题!
在这里插入图片描述
既然是面试,那咱们可不能让面试官久等了。

小明:OK,完事儿,等着面试官来表扬自己吧。他肯定会说:小子,你是个好手!工位都给你准备好了,工资你说了算。

暴力解法

    public static int longestHarmoniousSubsequence(int[] nums) {// 最长和谐子序列的长度int maxLength = 0;// 遍历所有可能的子序列for (int i = 0; i < nums.length; i++) {// 当前子序列的长度int currentLength = 1;// 从当前元素开始向后遍历for (int j = i + 1; j < nums.length; j++) {// 如果差为 1,则更新当前子序列的长度if (Math.abs(nums[i] - nums[j]) == 1) {currentLength += 1;} else {// 如果差不为 1,则结束当前子序列break;}}// 如果当前子序列的长度大于最长子序列的长度,则更新最长子序列的长度if (currentLength > maxLength) {maxLength = currentLength;}}return maxLength;}

在这里插入图片描述

面试官:嗯,你这个要是nums 数组 要是给了十万个数是不是会影响性能?

小明OS:今年这个找工市场,人言洛阳花似锦,偏我来时不逢春。。。怎的,技能要求突然涨了,不是做出来就行?

好吧,逼我拿出压箱底的东西是吧。的确这个算法是偏慢一些,但是这不是想着去请班花吃饭么。

这里我个人小白理解分析:

对于最长和谐子序列问题,我们可以使用滑动窗口来维护一个包含所有元素的和谐子序列。窗口的大小为 2,窗口中的元素之差为 1。

具体来说,我们可以从第一个元素开始,遍历整个数组。对于每个元素,我们将其添加到窗口中。如果窗口中的元素之差不为 1,则我们将窗口中的最小元素移出窗口。

这样,我们就可以确保窗口中始终包含一个和谐子序列。

Sliding Window

 public static int findLHS(int[] nums) {// 将数组升序排列Arrays.sort(nums);// 窗口的左边界int left = 0;// 窗口的右边界int right = 1;// 最长和谐子序列的长度int maxLength = 0; // 每次循环后的数组大小int len = 0;while(right < nums.length) {// 计算前后两个指针数字只差int diff =  nums[right] - nums[left];// 如果窗口中的元素之差大于1,并且左指针小于右指针,增加左指针while(diff > 1  && left < right) {left++;diff = nums[right] - nums[left];}// 就算当前符合要求的len长度if(nums[right] != nums[left]) {len = right - left + 1;}// 更新最长和谐子序列的长度maxLength = Math.max(len, maxLength);right++;}return maxLength;

好了,时间复杂度O(n)了,下一面继续

在这里插入图片描述

http://www.lryc.cn/news/288148.html

相关文章:

  • Vue-35、Vue中使用ref属性
  • 网络通信(15)-C#TCP客户端掉线重连实例
  • React进阶 - 14(说一说”虚拟DOM“中的”Diff算法“)
  • #GPU|LLM|AIGC#集成显卡与独立显卡|显卡在深度学习中的选择与LLM GPU推荐
  • HCIP-IPV6实验
  • 如何训练和导出模型
  • Springboot注解@Aspect(一)之@Aspect 作用和Aop关系详解
  • 自动化防DDoS脚本
  • ubuntu怎么查看有几个用户
  • Linux | makefile简单教程 | Makefile的工作原理
  • pcl+vtk(十四)vtkCamera相机简单介绍
  • TS基础知识点快速回顾(上)
  • hook(post-receive)无法使用
  • qt学习:tcp区分保存多个客户端
  • ORM-08-EclipseLink 入门介绍
  • 数据结构之树和二叉树定义
  • 大模型学习与实践笔记(十三)
  • 计算机网络——网络层(1)
  • 解释LoRA参数
  • 直播核心岗位基础内容
  • 安全防御第三次作业
  • WordPress反垃圾评论插件Akismet有什么用?如何使用Akismet插件?
  • 力扣80、删除有序数组中的重复项Ⅱ(中等)
  • 探索HTMLx:强大的HTML工具
  • NC65中间件能启动,前端客户端启动失败,加载异常,卡住(org.owasp.esapi)
  • 【大数据】YARN调度器及调度策略
  • 如何快速入门Python指南
  • vue3 页面长时间不使用,再次点击页面切换路由 操作无效报错
  • 【算法练习】leetcode算法题合集之动态规划篇
  • 青少年人工智能实验基地解决方案