寻找重复数 根据题意,数组中的数字都在1~n之间,所以数字的范围是小于数组的范围的,数组的元素可以和数组的索引相联系。 例如:nums[0] = 1 即可以将nums[0]作为索引 通过nums[0] 可以访问到nums[1],以此类推。 如左图所示,环的入口就是重复元素。 那么问题就转化为了如何找 ...
分类:
编程语言 时间:
2020-05-27 01:07:44
阅读次数:
75
快慢指针找链表环相关理论 一、一定会相遇的证明 1、如果链表没有环,那么快指针比慢指针先到达尾部(null)。 2、如果链表有环的话,因为快指针走的比慢指针快,所以在环中相遇的过程可以看作是快指针从环后边追赶慢指针的过程。 用递归法证明,快慢指针一定会相遇: (1)快指针与慢指针之间差一步。此时继续 ...
分类:
其他好文 时间:
2020-05-25 12:03:42
阅读次数:
46
"148. 排序链表" 难度 ?? 在 O ( n log n ) 时间复杂度和常数级空间复杂度下,对链表进行排序。 示例 1: 示例 2: 思路 $O(nlogn)$时间复杂度,分而治之,使用归并排序,数组归并排序代码可以 "看这里" 分割(找到中间节点,使用快慢指针) 合并 coding ...
分类:
编程语言 时间:
2020-05-23 20:37:46
阅读次数:
67
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 设置快慢指针,都从链表头出发,快指针每次走两步,慢指针一次走一步,假如有环,一定相遇于环中某点。接着让两个指针分别从相遇点和链表头出发,两者都改为每次走一步,最终相遇于环入口。 证明: 快指针路程=a+(b+c)k+b ,k ...
分类:
其他好文 时间:
2020-05-19 22:18:18
阅读次数:
53
[TOC] 归并排序思路 1)找到单链表中间节点,从而将原链表分为左右两部分; 2)对左右两部分链表分别进行归并排序,并合并左右两部分; 3)分别对两部分重复上述操作,直到所有元素都已排序成功。 因为单链表只能从链表头节点向后遍历,第一步操作用快慢指针找链表中点的时间复杂度就为O(n)。由于之后都是 ...
分类:
编程语言 时间:
2020-05-16 00:44:59
阅读次数:
82
题意描述 给定一个单链表,确定它是否是回文。 测试用例 Input: 1 2 Output: false Input: 1 2 2 1 Output: true 解题思路 一、思路一 1. 使用快慢指针,快指针fast一次走两步,慢指针slow一次走一步。当fast走到尾部时,slow走到链表中间。 ...
分类:
其他好文 时间:
2020-05-13 23:26:04
阅读次数:
54
Description Given a singly linked list, determine if it is a palindrome. Example 1: Example 2: Follow up: Could you do it in O(n) time and O(1) space? ...
分类:
其他好文 时间:
2020-05-10 15:24:52
阅读次数:
77
1.一个链表中有循环,怎样确定链表的头尾相交结点 用快慢指针,一个走得快一个走得慢,然后相交了,就说明所指的点是相交结点。 2.数据结构中的线性表有哪些以及数据结构中的顺序结构有哪些??????????? 线性表是n个数据特性相同的元素的组成有限序列。线性表可以采用顺序表和链表两种表示方式,栈和队列 ...
分类:
其他好文 时间:
2020-05-08 23:09:06
阅读次数:
94
快乐数(环 快慢指针) 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。 如果 n 是快乐数就返回 Tru ...
分类:
其他好文 时间:
2020-05-02 19:25:13
阅读次数:
60
本文总结了常见高频的关于链表的算法考察。 1.如何找到链表的中间元素? 我们可以采用快慢指针的思想,使用步长为1的慢指针和步长为2的快指针,当快指针抵达链表末尾时,此时慢指针指向的即为中点位置。 我们还可以采用递归的方式,当递归到最末尾的时候,我们已经能知道链表的长度,此时当递归回去的时候,判断当前 ...
分类:
编程语言 时间:
2020-05-02 11:27:02
阅读次数:
52