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

力扣HOT100 (1-5)

目录

1.两数之和

2.两数相加

拓展到牛客的TOP101的BM11( 链表相加(二))

3.无重复的最长子串(牛客BM92)

 解法1:

解法2:

4.寻找两个正序数组的中位数

 5.最长回文子串


1.两数之和

思路:HashMap的containKey,key是具体数值,value是对应下标。如果包含了目标数字-当前数字的值,则返回key对应的value以及当前下标,否则将其加入到HashMap中,

代码: 

public int[] twoSum(int[] nums, int target) {        //创建hashmapHashMap<Integer,Integer> hashMap = new HashMap<>();for (int i = 0; i < nums.length; i++) {//是否包含if (hashMap.containsKey(target-nums[i])){return new int[] {hashMap.get(target-nums[i]),i};}//将其加入到HashMap中hashMap.put(nums[i], i);}return new int[0];}

2.两数相加

 思路:链表第一个节点是个位,然后依次向后是百位,千位.....。因此,直接用链表从一个节点进行相加,获得新的值,存入新的链表中(尾插法),最终输出。

代码:

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {//新链表,有虚拟头节点ListNode newHead = new ListNode(-1);ListNode cur = newHead;//进位int temp = 0;while (l1!=null || l2!=null){int val = temp;if (l1!=null){val+=l1.val;l1=l1.next;}if (l2!=null){val+=l2.val;l2=l2.next;}temp = val/10;ListNode node = new ListNode(val%10);//尾插法建立链表cur.next=node;cur = cur.next;}//判断最后一位if (temp > 0){ListNode node = new ListNode(temp);cur.next= node;}//输出跳过虚拟头节点return newHead.next;}

拓展到牛客的TOP101的BM11( 链表相加(二))

思路:可知,链表最后一个节点是个位,然后依次向前是百位,千位.....,我们相加都是先从个位加起,然后百位.....(中间要考虑进位),因此,采用栈的方式,利用栈的先进后出,获取链表尾部(个位),然后依次出栈相加,获得新的值,存入新的链表中(头插法),最终输出。

 代码:

import java.util.*;
//链表类 
public class ListNode {int val;ListNode next = null;}public class Solution {/*** * @param head1 ListNode类 * @param head2 ListNode类 * @return ListNode类*/public ListNode addInList (ListNode head1, ListNode head2) {// write code here//特殊情况if (head1 == null){return head2;}if (head2 == null){return head1;}//两个辅助栈Stack<ListNode> s1 = new Stack<>();Stack<ListNode> s2 = new Stack<>();ListNode h1 = head1;ListNode h2 = head2;//两个链表依次入栈while (h1!= null){s1.push(h1);h1 = h1.next;}while (h2 != null){s2.push(h2);h2 = h2.next;}//进位int temp = 0;//创建新链表,ListNode newHead = null;//当s1或s2不为空的时候while (!s1.isEmpty() || !s2.isEmpty()){int val = temp;if (!s1.isEmpty()){val += s1.pop().val;}if (!s2.isEmpty()){val+=s2.pop().val;}//判断进位temp = val/10;//头插法,val%10是,如果存在进位的话,应该只取个位,比如说//s1的值是7,s2的值是8,两者相加后,得15,因此,进位是1,而新节点的值是5ListNode node = new ListNode(val%10);node.next = newHead;newHead = node;}//判断第一位if (temp > 0){ListNode node = new ListNode(temp);node.next = newHead;newHead = node;}return newHead;}
}

3.无重复的最长子串(牛客BM92)

 解法1:

思路:我们使用两个指针,一个i一个j,最开始的时候i和j指向第一个元素,然后i往后移,把扫描过的元素都放到HashMap中,如果i扫描过的元素没有重复的就一直往后移,顺便记录一下最大值max,如果i扫描过的元素有重复的,就改变j的位置。我们就以p w w k e w,(图源自牛客大佬)

代码:

public int lengthOfLongestSubstring(String s) {
// write code hereif (s==null)return 0;int length = s.length();int max = 0;//hashmapHashMap<Character,Integer> hp = new HashMap<>();for (int i = 0,j = 0; i < length; i++) {if (hp.containsKey(s.charAt(i))){j = Math.max(j,hp.get(s.charAt(i))+1);}hp.put(s.charAt(i),i);max = Math.max(max,i-j+1);}return max;}

解法2:

用一个队列(Queue),把元素不停的加入到队列中,如果有相同的元素,就把队首的元素移除,这样我们就可以保证队列中永远都没有重复的元素,记录队列的最大长度。

代码:

public int lengthOfLongestSubstring(String s) {
// write code hereif (s==null)return 0;int length = s.length();int max = 0;//创建队列Queue<Character> queue = new LinkedList<>();for (int i = 0; i < length; i++) {while (queue.contains(s.charAt(i)))//移除队首元素queue.poll();queue.add(s.charAt(i));max = Math.max(max,queue.size());}return max;}

4.寻找两个正序数组的中位数

思路:由于是困难题,故先放弃最优解法,先给出一个笨方法,即将两个数组合并,然后输出合并数组的中位数。(后续如果有多余的时间刷困难题,会进行完善)

代码:

public double findMedianSortedArrays(int[] nums1, int[] nums2) {//第一种方法:先将两个数组合并,然后排序,找到中位数。//创建arraylist,存储数组数据ArrayList<Integer> list = new ArrayList<>();//添加第一个数组for (int i = 0; i < nums1.length; i++) {list.add(nums1[i]);}//添加第二个数组for (int i = 0; i < nums2.length; i++) {list.add(nums2[i]);}//排序Collections.sort(list);//转化为数组Integer[] num = list.toArray(new Integer[(list.size())]);//寻找中位数if (num.length %2 == 0){return (num[num.length/2]+num[num.length/2-1])/2.0;}else {return num[num.length/2];}}

 5.最长回文子串

 思路:动态规划(参考官方)

动态规划的步骤:

 代码:

public static String longestPalindrome(String s) {int len = s.length();//如果字符串长度小于2,直接返回if (len < 2)return s;int max = 1;//起始位置int begin = 0;// dp[i][j] 表示 s[i..j] 是否是回文串boolean[][] dp = new boolean[len][len];//所有长度为1的子串一定是回文串for (int i = 0; i < len; i++) {dp[i][i] = true;}//将字符串转化为char数组char[] chars = s.toCharArray();//开始递推//L为子串的长度,从2开始枚举,因为子串长为1的已经为truefor (int L = 2; L <= len; L++) {//枚举左边界for (int i = 0; i < len; i++) {//右边界j = L+i-1;int j = L+i-1;//右边界越界则退出当前循环if (j >= len)break;//判断字符是否相等if (chars[i]!=chars[j]){dp[i][j] = false;}else {//如果子串长度<=2,即j-i<1if (j-i<=1)dp[i][j]=true;elsedp[i][j]=dp[i+1][j-1];}//只要 dp[i][L] == true 成立,就表示子串 s[i..L] 是回文,此时记录回文长度和起始位置if (dp[i][j] && j-i+1 > max){max = j-i+1;begin = i;}}}return s.substring(begin,begin+max);}

相关文章:

力扣HOT100 (1-5)

目录 1.两数之和 2.两数相加 拓展到牛客的TOP101的BM11( 链表相加&#xff08;二&#xff09;) 3.无重复的最长子串&#xff08;牛客BM92&#xff09; 解法1&#xff1a; 解法2&#xff1a; 4.寻找两个正序数组的中位数 5.最长回文子串 1.两数之和 思路&#xff1a;用Has…...

车载基础软件——AUTOSAR CP典型应用案例SOME/IP和TSN时间同步

我是穿拖鞋的汉子,魔都中坚持长期主义的一个屌丝工程师! 今天是2023年2月7日,上海还在下着雨,估计是到了梅雨时节(提前到来?),真想说句我劝天公重安排,不让梅雨早时来!!! 老规矩分享一段喜欢的文字,避免自己成为高知识低文化的工科男: “ 我们只需做的,是走好…...

【Linux】操作系统与进程的概念

目录 冯诺依曼体系 注意 为什么CPU不直接访问输入或输出设备&#xff1f; 跨主机间数据的传递 操作系统 管理 进程 描述进程 进程的查看和终止 bash 通过系统调用创建子进程 fork的辨析 冯诺依曼体系 &#x1f956;冯诺依曼结构也称普林斯顿结构&#xff0c;是一种将…...

(1分钟突击面试) 高斯牛顿、LM、Dogleg后端优化算法

高斯牛顿法 LM法 DogLeg方法编辑切换为居中添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09;知识点&#xff1a;高斯牛顿是线搜索方法 LM方法是信赖域方法。编辑切换为居中添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09;这个就是JTJ是…...

d3.js与echarts对比

D3.js 和 ECharts 是两种常用的数据可视化工具&#xff0c;它们有着不同的优缺点&#xff1a; D3.js&#xff1a; 优点&#xff1a; 功能强大&#xff0c;提供了极高的灵活性和定制性&#xff0c;支持多种图表类型&#xff0c;如柱状图、饼图、散点图、树图、网络图等。 可以…...

机器学习之K-means原理详解、公式推导、简单实例(python实现,sklearn调包)

目录1. 聚类原理1.1. 无监督与聚类1.2. K均值算法2. 公式推导2.1. 距离2.2. 最小平方误差3. 实例3.1. python实现3.2. sklearn实现4. 运行&#xff08;可直接食用&#xff09;1. 聚类原理 1.1. 无监督与聚类 在这部分我今天主要介绍K均值聚类算法&#xff0c;在这之前我想提一…...

OBS 进阶 一个从自定义对话框中 传参到插件的例子

目录 一、自定义对话框,传参综合例子 1、自定义对话框 1)自定义对话框类...

在Linux和Windows上编译datax-web-ui源码

记录&#xff1a;375场景&#xff1a;在CentOS 7.9操作系统上&#xff0c;使用apache-maven-3.8.7安装编译datax-web-ui源码。在Windows上操作系统上&#xff0c;使用apache-maven-3.8.7编译datax-web-ui源码。版本&#xff1a;JDK 1.8 node-v14.17.3 npm-6.14.13datax-web-ui开…...

React组件生命周期管理

组件生命,就是组件在不同阶段提供对应的钩子函数,来处理逻辑操作。比如初始化阶段,我们需要初始化组件相关的状态和变量。组件销毁阶段时,我们需要把一些数据结构销毁来节约内存。 React组件生命周期 React组件生命周期分为三个阶段:挂载阶段【Mount】、更新阶段【Updat…...

Linux:全志H3图像codec使用笔记

1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. 图像 codec 概述 图像编解码器(codec) 包含 Encoder 和 Decoder 两部分功能。我们用下列分别说明 Encoder 和 Decoder 的工作方式。 ----------…...

【Python小游戏】通过这款专为程序员设计的《极限车神》小游戏,你的打字速度可以赢过专业录入员,这个秘密98%的人都不知道哦~(爆赞)

导语 哈喽&#xff0c;我是你们的木木子&#x1f478;&#xff01; 今天小编要为大家介绍一款小编自己用代码码出来的赛车风格的打字小游戏 取名暂定为《&#x1f697;极限车神&#x1f697;》打字小游戏。 这款Pygame小游戏在玩法上可以说十分创新&#xff0c;不仅能游戏还…...

Springboot扩展点之BeanPostProcessor

前言 Springboot&#xff08;Spring&#xff09;的扩展点其实有很多&#xff0c;但是都有一个共同点&#xff0c;都是围绕着Bean和BeanFactory&#xff08;容器&#xff09;展开的&#xff0c;其实这也很好理解&#xff0c;Spring的核心是控制反转、依赖注入、面向切面编程&…...

Fluent Python 笔记 第 3 章 字典和集合

3.1 泛映射类型 只有可散列 的数据类型才能用作这些映射里的键 字典构造方法&#xff1a; >>> a dict(one1, two2, three3) >>> b {one: 1, two: 2, three: 3} >>> c dict(zip([one, two, three], [1, 2, 3])) >>> d dict([(two, 2…...

大型物流运输管理系统源码 TMS源码

大型物流运输管理系统源码 TMS是一套适用于物流公司的物流运输管理系统&#xff0c;涵盖物流公司内部从订单->提货->运单->配车->点到->预约->签收->回单->代收货款的全链条管理系统。 菜单功能 一、运营管理 1、订单管理&#xff1a;用于客户意向订…...

PCIE总线

PCIE总线记录描述PCI分类与速度PCIE连接拓扑与角色PCIE接口定义PCIE数据传输方式与中断在PCIE中有两种数据传输方式&#xff1a;PCIE中断&#xff1a;PCIE协议栈与工作流程PCIE地址空间分类实例分析PCIE两种访问方式描述 PCI-Express(peripheral component interconnect expre…...

Android IO 框架 Okio 的实现原理,如何检测超时?

本文已收录到 AndroidFamily&#xff0c;技术和职场问题&#xff0c;请关注公众号 [彭旭锐] 提问。 前言 大家好&#xff0c;我是小彭。 在上一篇文章里&#xff0c;我们聊到了 Square 开源的 I/O 框架 Okio 的三个优势&#xff1a;精简且全面的 API、基于共享的缓冲区设计以…...

简单介绍反射

1.定义Java的反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能调用它的任意方法和属性&#xff0c;既然能拿到&#xff0c;我们就可以修改部分类型信息&#xff1b;这种动态获取信息的…...

PyTorch学习笔记:nn.MSELoss——MSE损失

PyTorch学习笔记&#xff1a;nn.MSELoss——MSE损失 torch.nn.MSELoss(size_average None&#xff0c;reduce None&#xff0c;reduction mean)功能&#xff1a;创建一个平方误差(MSE)损失函数&#xff0c;又称为L2损失&#xff1a; l(x,y)L{l1,…,lN}T,ln(xn−yn)2l(x,y)L…...

apache和nginx的TLS1.0和TLS1.1禁用处理方案

1、TLS1.0和TLS1.1是什么&#xff1f; TLS协议其实就是网络安全传输层协议&#xff0c;用于在两个通信应用程序之间提供保密性和数据完整性&#xff0c;TLS 1. 0 和TLS 1. 1 是分别是96 年和 06 年发布的老版协议。 2、为什么要禁用TLS1.0和TLS1.1传输协议 TLS1.0和TLS1.1协…...

K_A12_002 基于STM32等单片机采集光敏电阻传感器参数串口与OLED0.96双显示

K_A12_002 基于STM32等单片机采集光敏电阻传感器参数串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明IIC地址/采集通道选择/时序对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RC光敏电阻传感器模块1.2、STM32F103C8T6光敏电阻传感器模块五、基…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...