Golang每日一练(leetDay0055) 最长子串、相交链表

news2024/11/24 8:39:48

目录

159.至多包含两个不同字符的最长子串  Longest-substring-with-at-most-two-distinct-characters  🌟🌟

160. 相交链表 Intersection-of-two-linked-lists  🌟

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


159.至多包含两个不同字符的最长子串  Longest-substring-with-at-most-two-distinct-characters

给定一个字符串 s ,找出至多包含两个不同字符的最长子串 t 。

示例 1:

输入:"eceba"
输出:3
解释:t 是 "ece",长度为3。

示例 2:

输入:"ccaabbb"
输出:5
解释:t 是 "aabbb",长度为5。

代码1: 滑动窗口

package main

import "fmt"

func lengthOfLongestSubstringTwoDistinct(s string) int {
	n := len(s)
	if n <= 2 {
		return n
	}
	left, right := 0, 0
	charsCount := make(map[byte]int)
	maxLen := 0
	for right < n {
		charsCount[s[right]]++
		for len(charsCount) > 2 {
			charsCount[s[left]]--
			if charsCount[s[left]] == 0 {
				delete(charsCount, s[left])
			}
			left++
		}
		maxLen = max(maxLen, right-left+1)
		right++
	}
	return maxLen
}

func max(x, y int) int {
	if x > y {
		return x
	}
	return y
}

func main() {
	str := "eceba"
	fmt.Println(lengthOfLongestSubstringTwoDistinct(str))
	str = "ccaabbb"
	fmt.Println(lengthOfLongestSubstringTwoDistinct(str))
}

代码2: 双指针

package main

import "fmt"

func lengthOfLongestSubstringTwoDistinct(s string) int {
	n := len(s)
	if n <= 2 {
		return n
	}
	left, right := 0, 0
	charsCount := make(map[byte]int)
	maxLen := 0
	num := 0
	for right < n {
		charsCount[s[right]]++
		if charsCount[s[right]] == 1 {
			num++
		}
		right++
		for num > 2 {
			charsCount[s[left]]--
			if charsCount[s[left]] == 0 {
				num--
			}
			left++
		}
		maxLen = max(maxLen, right-left)
	}
	return maxLen
}

func max(x, y int) int {
	if x > y {
		return x
	}
	return y
}

func main() {
	str := "eceba"
	fmt.Println(lengthOfLongestSubstringTwoDistinct(str))
	str = "ccaabbb"
	fmt.Println(lengthOfLongestSubstringTwoDistinct(str))
}

输出:

3
5


160. 相交链表 Intersection-of-two-linked-lists

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。

图示两个链表在节点 c1 开始相交

题目数据 保证 整个链式结构中不存在环。

注意,函数返回结果后,链表必须 保持其原始结构 。

自定义评测:

评测系统 的输入如下(你设计的程序 不适用 此输入):

  • intersectVal - 相交的起始节点的值。如果不存在相交节点,这一值为 0
  • listA - 第一个链表
  • listB - 第二个链表
  • skipA - 在 listA 中(从头节点开始)跳到交叉节点的节点数
  • skipB - 在 listB 中(从头节点开始)跳到交叉节点的节点数

评测系统将根据这些输入创建链式数据结构,并将两个头节点 headA 和 headB 传递给你的程序。如果程序能够正确返回相交节点,那么你的解决方案将被 视作正确答案 。

示例 1:

输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,6,1,8,4,5], skipA = 2, skipB = 3
输出:Intersected at '8'
解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。
从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,6,1,8,4,5]。
在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。

示例 2:

输入:intersectVal = 2, listA = [1,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1
输出:Intersected at '2'
解释:相交节点的值为 2 (注意,如果两个链表相交则不能为 0)。
从各自的表头开始算起,链表 A 为 [1,9,1,2,4],链表 B 为 [3,2,4]。
在 A 中,相交节点前有 3 个节点;在 B 中,相交节点前有 1 个节点。

示例 3:

输入:intersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB = 2
输出:null
解释:从各自的表头开始算起,链表 A 为 [2,6,4],链表 B 为 [1,5]。
由于这两个链表不相交,所以 intersectVal 必须为 0,而 skipA 和 skipB 可以是任意值。
这两个链表不相交,因此返回 null 。

提示:

  • listA 中节点数目为 m
  • listB 中节点数目为 n
  • 1 <= m, n <= 3 * 10^4
  • 1 <= Node.val <= 10^5
  • 0 <= skipA <= m
  • 0 <= skipB <= n
  • 如果 listA 和 listB 没有交点,intersectVal 为 0
  • 如果 listA 和 listB 有交点,intersectVal == listA[skipA] == listB[skipB]

进阶:你能否设计一个时间复杂度 O(m + n) 、仅用 O(1) 内存的解决方案?

代码:

package main

import "fmt"

type ListNode struct {
	Val  int
	Next *ListNode
}

var (
	skipA        = 0
	skipB        = 0
	intersectVal = 0
)

func build(list []int) *ListNode {
	head := &ListNode{Val: -1 << 31}
	for i := len(list) - 1; i >= 0; i-- {
		p := &ListNode{Val: list[i]}
		p.Next = head.Next
		head.Next = p
	}
	return head
}

func (head *ListNode) travel() {
	if head != nil {
		for p := head.Next; p != nil; p = p.Next {
			fmt.Print(p.Val)
			if p.Next != nil {
				fmt.Print("->")
			}
		}
	}
	fmt.Println("<nil>")
}

func getIntersectionNode(headA, headB *ListNode) *ListNode {
	pointA, pointB := headA, headB
	for skipA > 0 {
		pointA = pointA.Next
		skipA--
	}
	for skipB > 0 {
		pointB = pointB.Next
		skipB--
	}
	if isSameList(pointA, pointB) {
		return pointA
	}
	return nil
}

func isSameList(l1, l2 *ListNode) bool {
	for l1 != nil && l2 != nil {
		if l1.Val != l2.Val {
			return false
		}
		l1 = l1.Next
		l2 = l2.Next
	}
	return l1 == nil && l2 == nil
}

func main() {
	nums1 := []int{4, 1, 8, 4, 5}
	nums2 := []int{5, 6, 1, 8, 4, 5}
	headA := build(nums1)
	headB := build(nums2)
	headA.travel()
	headB.travel()
	skipA, skipB = 2, 3
	intersectVal = 8
	IntersectionNode := getIntersectionNode(headA, headB)
	IntersectionNode.travel()
}

输出: 

4->1->8->4->5<nil>
5->6->1->8->4->5<nil>
8->4->5<nil>


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

🌟 收藏,你的青睐是我努力的方向! 

评论,你的意见是我进步的财富!  

 主页:https://hannyang.blog.csdn.net/ 

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏

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

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

相关文章

【C++初阶】类与对象(中)

目录 一.类的6个默认成员函数二、构造函数特性 三、析构函数概念特性 四、拷贝构造函数概念特性 五、赋值运算符重载5.1 运算符重载5.2 赋值运算符重载 一.类的6个默认成员函数 在C中&#xff0c;一个类中并没有实现任何属性和方法&#xff0c;被叫做空类&#xff0c;但是一个…

《Linux 内核设计与实现》05. 系统调用

文章目录 内核通信API、POSIX、C库 系统调用系统调用号系统调用的性能 系统调用处理程序指定恰当的系统调用参数传递 系统调用的实现实现系统调用参数验证 系统调用上下文绑定一个系统调用的最后步骤从用户空间绯闻系统调用 内核通信 系统调用在用户空间进程和硬件设备之间添加…

【疯狂造轮子-iOS】JSON转Model系列之一

1. 前言 之前一直看别人的源码&#xff0c;虽然对自己提升比较大&#xff0c;但毕竟不是自己写的&#xff0c;很容易遗忘。这段时间准备自己造一些轮子&#xff0c;主要目的还是为了提升自身实力&#xff0c;总不能一遇到问题就Google 。 之前写i博客园客户端的时候&#xff0…

借助PLC-Recorder,西门子PLC S7-200SMART实现2ms周期采集的方法(带时间戳采集)

目录 1、测试条件 2、测试结论 3、PLC的发送程序 4、PLC-Recorder侧的通讯设置 5、PLC-Recorder的通道配置 6、PLC-Recorder的变量配置 7、记录数据的情况 8、再说时间戳 9、小结 高速数据采集要保证速度&#xff0c;也要保证时刻的准确性。在windows系统里&#xff0…

ESP32学习笔记22-TWAI-CAN

22.TWAI-CAN 22.1概述 22.1.1参考博客 ESP32 基于自带控制器实现CAN总线通信(上) - 知乎 (zhihu.com) ESP32 基于自带控制器实现CAN总线通信(下) - 知乎 (zhihu.com) 22.1.2 ESP32 TWAI/CAN外设说明 可以支持标准帧格式(11位ID)和扩展帧格式(29位ID)ESP32 包含 1 个 T…

生信刷题之ROSALIND——Part 4 (MPRT, MRNA, ORF)

目录 写在前面1、Finding a Protein MotifProblemSample DatasetSample OutputCodeOutput 2、Inferring mRNA from ProteinProblemSample DatasetSample OutputexampleCodeOutput 3、Open Reading FramesProblemSample DatasetSample OutputCodeOutput 写在前面 本来打算每周更…

3.Hive基础命令练习

创建表格如下: 部门表&#xff1a; create table if not exists dept(deptno int, -- 部门编号dname string, -- 部门名称loc int -- 部门位置 ) row format delimited fields terminated by \t; 员工表&#xff1a; create table if not exists emp(empno int,…

AI 工具合辑盘点(十三)持续更新 之 面向宠物爱好者的 AI 工具和面向电影爱好者的 AI 工具

亲爱的宠物爱好者&#xff0c;这个部分是专门为你准备的。&#x1f43e; 不论你是爱狗人士还是铲屎官&#xff0c;AI 都能满足你。 访问地址&#xff1a; This Cat Does Not Exist 猫咪生成器 你知道喜欢猫的爱好有个专门的名字吗&#xff1f;在国外被称为ailurophilia&…

操作系统考试复习——第四章 对换 分页存储管理方式

对换技术也成为交换技术&#xff0c;由于当时计算机的内存都非常小&#xff0c;为了使该系统能分时运行多个用户程序而引入了对换技术。 1.对换的引入&#xff1a; 所谓“对换”&#xff0c;是指把内存中暂时不能运行的进程或者暂时不用的程序和数据调出到外存上&#xff0c;…

zk之数据的发布与订阅

数据的发布和订阅&#xff1a; &#xff08;1&#xff09;数据的发布与订阅是一个一对多的关系。多个订阅者对象同时监听某一个主题对象。这个主题对象在自身状态发生变化时&#xff0c;会通知所有的订阅者对象&#xff0c;使它们能够自动的更新自己的状态。发布和订阅可以让发…

SpringBoot项目修改application.yml,application-prod.yml配置文件中的端口,数据库链接等信息后,项目突然不能运行

SpringBoot项目修改application.yml&#xff0c;application-prod.yml配置文件中的端口&#xff0c;数据库链接等信息后&#xff0c;项目突然不能运行 问题记录 &#xff0c;SpringBoot项目修改application.yml&#xff0c;application-prod.yml配置文件中的端口&#xff0c;数…

跟姥爷深度学习5 浅用卷积网络做mnist数字识别

一、前言 前面用TensorFlow浅做了一个温度预测&#xff0c;使用的是全连接网络&#xff0c;同时我们还对网上的示例做了调试和修改&#xff0c;使得预测结果还能看。本篇我们更进一步使用CNN&#xff08;卷积&#xff09;网络&#xff0c;不过再预测温度就有点大材小用&#x…

Stable Diffusion Webui 本地部署【踩坑记录】

1、安装python Python Release Python 3.10.6 | Python.org 2、安装git git是一个代码管理工具&#xff0c;通过它可以将开源项目仓库克隆到本地 下载地址&#xff1a;Git - Downloading Package 3、下载stable-diffusion-webui 可以新建一个目录&#xff0c;在文件夹内单…

代数余子式怎么求

代数余子式是矩阵中每个元素的代数余数&#xff0c;可以通过以下步骤求得&#xff1a; 1. 找到该元素所在的行和列&#xff0c;将其删除&#xff0c;得到一个新的矩阵。 2. 计算新矩阵的行列式&#xff0c;乘以(-1)^(行号列号)&#xff0c;即为该元素的代数余子式。 例如 对…

vulnhub靶场之nasef1

1.信息收集 探测存活主机&#xff0c;发现192.168.239.176存活 对目标主机192.168.239.176进行端口扫描&#xff0c;发现存活22、80端口 浏览器访问http://192.168.239.176/&#xff0c;发现为apache2的页面&#xff0c;查看源码&#xff0c;未发现异常。 对http://192.16…

-笔记 tps qps

页面请求异步处理 将请求 扔进 kafka, Mq等 MQ单机抗几万并发也是ok的 底层批量处理 sql 处理 尽量批量处理&#xff0c;减少耗时 分库分表&#xff0c; 可能到了最后数据库层面还是免不了抗高并发的要求&#xff0c;好吧&#xff0c;那么就将一个数据库拆分为多个库&#xf…

Java ---System类

System 类位于 java.lang 包&#xff0c;代表当前 Java 程序的运行平台&#xff0c;系统级的很多属性和控制方法都放置在该类的内部。由于该类的构造方法是 private 的&#xff0c;所以无法创建该类的对象&#xff0c;也就是无法实例化该类。 System 类提供了一些类变量和类方…

PBDB Data Service:Thumbnail images of lifeforms(生命形式的缩略图)

Thumbnail images of lifeforms&#xff08;生命形式的缩略图&#xff09; 描述用法参数方法响应值格式术语表 描述 此操作返回表示指定分类的图像&#xff0c;或关于图像的信息。如果后缀是 .png&#xff0c;则返回图像内容数据。否则&#xff0c;将以指定的格式返回一个描述…

2023年全国硕士研究生入学统一考试英语(二)试题

2023年全国硕士研究生入学统一考试英语&#xff08;二&#xff09;试题 Section I Use of English Directions: Read the following text. Choose the best word ( s) for each numbered blank and mark A, B , C or D on the ANSWER SHEET. ( 10 points) Here’s a common …

OSS文件打包下载

前言 OSS 存放了很多项目&#xff08;项目是 TMagic 低代码平台编辑生成&#xff0c;自动上传 OSS&#xff09;&#xff0c;现在需要在管理后台将项目打包ZIP下载&#xff0c;并不在本地生成文件。 OSS 要下载项目文件&#xff1a; 一、思路实现 创建 OSSClient 实例获取 Bu…