【LeetCode】3月23日打卡-Day8

题1 链表的中间结点

描述

给定一个带有头结点 head 的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
示例 1:
输入:[1,2,3,4,5]
输出:此列表中的结点 3 (序列化形式:[3,4,5])
返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。
注意,我们返回了一个 ListNode 类型的对象 ans,这样:
ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next = NULL.
示例 2:
输入:[1,2,3,4,5,6]
输出:此列表中的结点 4 (序列化形式:[4,5,6])
由于该列表有两个中间结点,值分别为 3 和 4,我们返回第二个结点。
提示:
给定链表的结点数介于 1 和 100 之间。

题解1 双指针法

思路:用两个指针,p是慢指针,q是快指针,移动速度是p的两倍,当q到达末尾的时候,p指针正好指在链表中间。

class Solution {public ListNode middleNode(ListNode head) {ListNode q = head;ListNode p = head;while(q != null && q.next != null){q = q.next.next;p = p.next;}return ;}
}

题解2 单指针法

思路:首先遍历链表,得到链表长度,然后遍历至链表长度二分之一处

class Solution {public ListNode middleNode(ListNode head) {int n = 0;ListNode cur = head;while (cur != null) {++n;cur = cur.next;}int k = 0;cur = head;while (k < n / 2) {++k;cur = cur.next;}return cur;}
}

题解3 数组法

思路:链表的缺点在于不能通过下标访问对应的元素。因此我们可以考虑对链表进行遍历,同时将遍历到的元素依次放入数组 A 中。如果我们遍历到了 N 个元素,那么链表以及数组的长度也为 N,对应的中间节点即为 A[N/2]。

class Solution {public ListNode middleNode(ListNode head) {ListNode[] A = new ListNode[100];int t = 0;while (head != null) {A[t++] = head;head = head.next;}return A[t / 2];}
}

题2 环形链表

描述

给定一个链表,判断链表中是否有环。
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。
示例 1:
输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。
示例 2:
输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。
示例 3:
输入:head = [1], pos = -1
输出:false
解释:链表中没有环。

题解1 快慢指针法

思路:如果存在环,快慢指针总会相遇。

/*** Definition for singly-linked list.* class ListNode {*     int val;*     ListNode next;*     ListNode(int x) {*         val = x;*         next = null;*     }* }*/
public class Solution {public boolean hasCycle(ListNode head) {ListNode i = head;ListNode j = head;while(i != null && i.next != null){i = i.next.next;j = j.next;if(i == j){return true;}}return false;}
}

题解2 哈希表法

思路:通过检查一个结点此前是否被访问过来判断链表是否为环形链表。常用的方法是使用哈希表。我们遍历所有结点并在哈希表中存储每个结点的引用(或内存地址)。如果当前结点为空结点 null(即已检测到链表尾部的下一个结点),那么我们已经遍历完整个链表,并且该链表不是环形链表。如果当前结点的引用已经存在于哈希表中,那么返回 true(即该链表为环形链表)。

public boolean hasCycle(ListNode head) {Set<ListNode> nodesSeen = new HashSet<>();while (head != null) {if (nodesSeen.contains(head)) {return true;} else {nodesSeen.add(head);}head = head.next;}return false;
}

题3 实现strStr()

描述

题解1

思路:如果子串为空,返回0。如果子串长于原字符串剩余字符串,则找不到,返回-1。如果原字符串当前位置和子串首字母匹配,则对照字符串依次匹配字符,如果子串全匹配,返回i,否则退出子串的循环,原字符串当前位置向后移动。

class Solution {public int strStr(String haystack, String needle) {if(needle.length() == 0){return 0;}for(int i = 0; i < haystack.length(); i++){if ((haystack.length() - i) < needle.length()) {return -1;}if(haystack.charAt(i) == needle.charAt(0)){boolean flag = true;for(int j = 0; j < needle.length(); j++){if(haystack.charAt(i+j) != needle.charAt(j)){flag = false;}}if(flag){return i;}}}return -1;}
}

题解2 滑动窗口+subString

class Solution {public int strStr(String haystack, String needle) {int L = needle.length(), n = haystack.length();for (int start = 0; start < n - L + 1; ++start) {if (haystack.substring(start, start + L).equals(needle)) {return start;}}return -1;}
}

题解3 双指针法

思路:pn指向原字符串,pL指向子串,当在原字符串中找到匹配子串第一个字母时,比较两字符串,记录相同的字符数,遇到不同的字符即退出比较循环,如果相同字符数等于子串字符数,返回pn减去子串长度(原串和子串在一起移动)。如果相同字符数不等于子串字符数,说明匹配失败,原字符串要回溯到比较循环之前的位置,即pn-子串长度+1位置。

class Solution {public int strStr(String haystack, String needle) {int L = needle.length(), n = haystack.length();if (L == 0) return 0;int pn = 0;while (pn < n - L + 1) {// find the position of the first needle character// in the haystack stringwhile (pn < n - L + 1 && haystack.charAt(pn) != needle.charAt(0)) ++pn;// compute the max match stringint currLen = 0, pL = 0;while (pL < L && pn < n && haystack.charAt(pn) == needle.charAt(pL)) {++pn;++pL;++currLen;}// if the whole needle string is found,// return its start positionif (currLen == L) return pn - L;// otherwise, backtrackpn = pn - currLen + 1;}return -1;}
}

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

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

相关文章

KD Tree的原理及Python实现

1. 原理篇我们用大白话讲讲KD-Tree是怎么一回事。1.1 线性查找假设数组A为[0, 6, 3, 8, 7, 4, 11]&#xff0c;有一个元素x&#xff0c;我们要找到数组A中距离x最近的元素&#xff0c;应该如何实现呢&#xff1f;比较直接的想法是用数组A中的每一个元素与x作差&#xff0c;差的…

漆桂林 | 知识图谱的应用

本文作者为东南大学漆桂林老师&#xff0c;首发于知乎专栏知识图谱和智能问答 前面一篇文章“知识图谱之语义网络篇”已经提到了知识图谱的发展历史&#xff0c;回顾一下有以下几点&#xff1a; 1. 知识图谱是一种语义网络&#xff0c;即一个具有图结构的知识库&#xff0c;这里…

NLP预训练之路——从word2vec, ELMo到BERT

前言 还记得不久之前的机器阅读理解领域&#xff0c;微软和阿里在SQuAD上分别以R-Net和SLQA超过人类&#xff0c;百度在MS MARCO上凭借V-Net霸榜并在BLEU上超过人类。这些网络可以说一个比一个复杂&#xff0c;似乎“如何设计出一个更work的task-specific的网络"变成了NLP…

论文 | 信息检索结果Ranking的评价指标《RankDCG: Rank-Ordering Evaluation Measure》

未经允许&#xff0c;不得转载&#xff0c;谢谢~~ 一 文章简介 为什么要提出这个新的评价算法&#xff1f; 我们都知道ranking过程对于信息检索的结果是非常重要的&#xff0c;那么我们就需要有一些算法能评价ranking的结果到底如何。现有用来评价ranking的常用算法有&#xff…

【LeetCode】3月24日打卡-Day9

题1 按摩师 描述 一个有名的按摩师会收到源源不断的预约请求&#xff0c;每个预约都可以选择接或不接。在每次预约服务之间要有休息时间&#xff0c;因此她不能接受相邻的预约。给定一个预约请求序列&#xff0c;替按摩师找到最优的预约集合&#xff08;总预约时间最长&#x…

肖仰华 | 基于知识图谱的用户理解

本文转载自公众号知识工场。 本文整理自肖仰华教授在三星电子中国研究院做的报告&#xff0c;题目为《Understanding users with knowldge graphs》。 今天&#xff0c;很高兴有这个机会来这里与大家交流。 前面两位老师把基于社会影响力的传播和推荐&#xff0c;以及跨领域的…

【LeetCode】3月25日打卡-Day10

题1 三维形体的表面积 描述 在 N * N 的网格上&#xff0c;我们放置一些 1 * 1 * 1 的立方体。 每个值 v grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。 请你返回最终形体的表面积。 示例 1&#xff1a; 输入&#xff1a;[[2]] 输出&#xff1a;10 示例 2&#xf…

NLP的游戏规则从此改写?从word2vec, ELMo到BERT

前言还记得不久之前的机器阅读理解领域&#xff0c;微软和阿里在SQuAD上分别以R-Net和SLQA超过人类&#xff0c;百度在MS MARCO上凭借V-Net霸榜并在BLEU上超过人类。这些网络可以说一个比一个复杂&#xff0c;似乎“如何设计出一个更work的task-specific的网络"变成了NLP领…

信息检索IR评价中常见的评价指标-MAP\NDCG\ERR\P@10等

信息检索评价是对信息检索系统性能&#xff08;主要满足用户信息需求的能力&#xff09;进行评估的活动。通过评估可以评价不同技术的优劣&#xff0c;不同因素对系统的影响&#xff0c;从而促进本领域研究水平的不断提高。信息检索系统的目标是较少消耗情况下尽快、全面返回准…

科普 | “开放知识”的定义

OpenKG 主要关注知识图谱数据&#xff08;或者称为结构化数据、语义数据、知识库&#xff09;的开放&#xff0c;广义上 OpenKG 属于开放数据的一种。 关于“开放”的定义&#xff0c;比较好的参考是由国际开放知识基金会 OKFN.ORG(Open Knowledge International)给与的“开放知…

【LeetCode】3月26日打卡-Day11

题1 车的可用捕获量 描述 在一个 8 x 8 的棋盘上&#xff0c;有一个白色车&#xff08;rook&#xff09;。也可能有空方块&#xff0c;白色的象&#xff08;bishop&#xff09;和黑色的卒&#xff08;pawn&#xff09;。它们分别以字符 “R”&#xff0c;“.”&#xff0c;“B…

【小夕精选】如何优雅而时髦的解决不均衡分类问题

之前小夕因项目需要研究了一小阵子的不均衡&#xff08;文本&#xff09;分类问题&#xff0c;不过没有研究的太过深入&#xff0c;也没有总结出一套成体系的处理思路。正好今天发现数据挖掘大佬「微调」在知乎上写了一个言简意赅又很具有实际操作价值的回答&#xff0c;于是搬…

科普 | 以链接为中心的系统:Link-based Systems

硅谷教父凯文凯利在他新书《必然》中谈到了网页 2.0&#xff1a;“…今天的网络就是所有可以访问到的超链接文件… 但在未来的 30 年中…超链接的触手会不断延伸&#xff0c;把所有的比特连接起来。一个主机游戏中发生的事件会像新闻一样搜索即得。你还能寻找一段 YouTube 视频…

优云软件数据专家最佳实践:数据挖掘与运维分析

优云软件数据专家最佳实践&#xff1a;数据挖掘与运维分析 这份研究报告&#xff0c;作者是优云软件数据专家陈是维&#xff0c;在耗时1年时间制作的一份最佳实践&#xff0c;今天和大家分享下&#xff0c;关于《数据采矿和运维分析》&#xff0c;共同探讨~ 数据挖掘&#xff0…

【LeetCode】3月27日打卡-Day12

题1 描述 给定一副牌&#xff0c;每张牌上都写着一个整数。 此时&#xff0c;你需要选定一个数字 X&#xff0c;使我们可以将整副牌按下述规则分成 1 组或更多组&#xff1a; 每组都有 X 张牌。 组内所有的牌上都写着相同的整数。 仅当你可选的 X > 2 时返回 true。 示例 1…

史上最全提升GPU的tricks合集

前言 首先&#xff0c;如果你现在已经很熟悉tf.dataestimator了&#xff0c;可以把文章x掉了╮(&#xffe3;▽&#xffe3;””)╭ 但是&#xff01;如果现在还是在进行session.run(..)的话&#xff01;尤其是苦恼于GPU显存都塞满了利用率却上不去的童鞋&#xff0c;这篇文章或…

领域应用 | 图数据库及其在恒昌的应用简介

首发于知乎专栏知识图谱和智能问答&#xff0c;作者为量子胖比特。 背景 历史上&#xff0c;多数企业级应用都运行在一个关系型数据库上&#xff08;RDBMS&#xff09;&#xff0c;近年来&#xff0c;随着数据存储技术的飞速发展&#xff0c;关系型数据库在灵活性和可伸缩性方面…

【LeetCode】3月28日打卡-Day13

题1 单词的压缩编码 描述 给定一个单词列表&#xff0c;我们将这个列表编码成一个索引字符串 S 与一个索引列表 A。 例如&#xff0c;如果这个列表是 [“time”, “me”, “bell”]&#xff0c;我们就可以将其表示为 S “time#bell#” 和 indexes [0, 2, 5]。 对于每一个索引…