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

专业的郑州网站推广/佛山网站开发公司

专业的郑州网站推广,佛山网站开发公司,什么是seo网站优化,php网站做安卓客户端目录 1.两数之和 2.两数相加 拓展到牛客的TOP101的BM11( 链表相加(二)) 3.无重复的最长子串(牛客BM92) 解法1: 解法2: 4.寻找两个正序数组的中位数 5.最长回文子串 1.两数之和 思路:用Has…

目录

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光敏电阻传感器模块五、基…...

《机器学习》学习笔记

第 2 章 模型评估与选择 2.1 经验误差与过拟合 精度&#xff1a;精度1-错误率。如果在 mmm 个样本中有 aaa 个样本分类错误&#xff0c;则错误率 Ea/mEa/mEa/m&#xff0c;精度 1−a/m1-a/m1−a/m。误差&#xff1a;一般我们把学习器的实际预测输出与样本的真实输出之间的差…...

前端卷算法系列(一)

前端卷算法系列&#xff08;一&#xff09; 两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同…...

【机器学习】聚类算法(理论)

聚类算法&#xff08;理论&#xff09; 目录一、概论1、聚类算法的分类2、欧氏空间的引入二、K-Means算法1、算法思路2、算法总结三、DBSCAN算法1、相关概念2、算法思路3、算法总结四、实战部分一、概论 聚类分析&#xff0c;即聚类&#xff08;Clustering&#xff09;&#xf…...

Docker-用Jenkins发版Java项目-(1)Docke安装Jenkins

文章目录前言环境背景操作流程docker安装及jenkins软件安装jenkins配置登录配置安装插件及创建账号前言 学海无涯&#xff0c;旅“途”漫漫&#xff0c;“途”中小记&#xff0c;如有错误&#xff0c;敬请指出&#xff0c;在此拜谢&#xff01; 最近新购得了M2的MAC&#xff0c…...

java集合框架内容整理

主要内容集合框架体系ArrayListLinkedListHashSetTreeSetLinkedHashSet内部比较器和外部比较器哈希表的原理List集合List集合的主要实现类有ArrayList和LinkedList&#xff0c;分别是数据结构中顺序表和链表的实现。另外还包括栈和队列的实现类&#xff1a;Deque和Queue。• Li…...

win10系统安装Nginx

Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器&#xff0c;同时也提供了IMAP/POP3/SMTP服务。 Nginx可以进行反向代理、负载均衡、HTTP服务器&#xff08;动静分离&#xff09;、正向代理等操作。因为最近在公司使用到了Nginx 第一步&#xff1a;下载Nginx …...

数据库学习笔记(2)——workbench和SQL语言

1、workbench简介&#xff1a; 登录客户端的两种方法 在cmd中&#xff0c;只能通过sql语句控制数据库&#xff1b;workbench其实就是一种图形化数据库管理工具&#xff0c;在workbench中既可以通过sql语句控制数据库&#xff0c;也可以通过图形化界面控制数据库。通过workbenc…...

测量学期末考试之名词解释总结

仅供自己参考&#xff0c;且范围不全面.大地水准面与处于静止平衡状态的平均海水面重合&#xff0c;并延伸通过陆地的水准面高程地面点到大地水准面的铅锤距离水准面处于静止状态的水面就是水准面高差两点的水准面之间的铅锤距离垂直角在铅锤面上&#xff0c;瞄准目标的倾斜视线…...

TDengine时序数据库的简单使用

最近学习了TDengine数据库&#xff0c;因为我们公司有硬件设备&#xff0c;设备按照每分钟&#xff0c;每十分钟&#xff0c;每小时上传数据&#xff0c;存入数据库。而这些数据会经过sql查询&#xff0c;统计返回展示到前端。但时间积累后现在数据达到了百万级数据&#xff0c…...

记录每日LeetCode 2335.装满被子需要的最短总时长 Java实现

题目描述&#xff1a; 现有一台饮水机&#xff0c;可以制备冷水、温水和热水。每秒钟&#xff0c;可以装满 2 杯 不同 类型的水或者 1 杯任意类型的水。 给你一个下标从 0 开始、长度为 3 的整数数组 amount &#xff0c;其中 amount[0]、amount[1] 和 amount[2] 分别表示需要…...