问题描述:快速找到未知长度的单链表的中间结点 普通方法:首先遍历一遍单链表,以确定单链表的长度L,然后再从头结点出发,循环L/2次,找到单链表的中间结点。 高效算法(快慢指针):设置两个指针,*search,*mid都指向单链表的头结点。其中*search指针的移动速度是*mid指针移动速度的2倍。 ...
分类:
其他好文 时间:
2018-11-02 20:32:03
阅读次数:
222
一次遍历算法 算法 算法可以只使用一次遍历。我们可以使用两个指针而不是一个指针。第一个指针从列表的开头向前移动 n+1 步,而第二个指针将从列表的开头出发。现在,这两个指针被 n 个结点分开。我们通过同时移动两个指针向前来保持这个恒定的间隔,直到第一个指针到达最后一个结点。此时第二个指针将指向从最后 ...
分类:
其他好文 时间:
2018-10-30 23:51:48
阅读次数:
190
Reverse a singly linked list.Example:Input: 1->2->3->4->5->NULLOutput: 5->4->3->2->1->NULL想法:设置两个指针,一个指向当前节点,另一个指向当前节点的写一个节点。然后逐个反转/** * Definition fo... ...
分类:
其他好文 时间:
2018-10-28 21:55:16
阅读次数:
183
概念 树是一种非线性的数据结构,相对于线性的数据结构(链表、数组)而言,树由节点组成,树的平均运行时间更短(往往与树相关的排序时间复杂度都不会高),一般的树是有很多很多个分支的,分支下又有很多很多个分支,如果在程序中研究这个会非常麻烦。因为本来树就是非线性的,而我们计算机的内存是线性存储的,太过复杂 ...
分类:
其他好文 时间:
2018-10-28 19:26:44
阅读次数:
151
数组二分查找: 1.先对数组排序,从小到大排序 2.定义两个指针,左指针(left)指向数组第一个元素,右指针(right)指向数组最后一个元素 3.取数组中间(nums[mid])的项和目标值(target)比较 4.如果中值小于目标值,说明目标值在后半数组,将左指针(left)指向nums[mi ...
分类:
Web程序 时间:
2018-10-21 13:13:39
阅读次数:
164
1. 题目 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1 2 3 4 5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1 2 3 5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗? 2. 思路 定义两个指针 p ...
分类:
其他好文 时间:
2018-10-21 00:59:14
阅读次数:
176
一、题目 1、审题 2、分析 分别采用递归、迭代的方式将链表进行翻转。 二、解答 1、思路: 方法一、 迭代: 采用两个指针 pre、cur 方法二、 递归: ...
分类:
其他好文 时间:
2018-10-20 19:52:58
阅读次数:
153
"传送门" 这题为什么要用二分呢?/huaji 首先可以$O(n)$预处理出从某个物品$i$开始放,只放一个盒子,能放的最后物品的位置$j$,只要用两个指针维护左右端点,每次移动一下左端点同时尽量把右端点右移救星了 然后我们要放的所有物品是原来的一个后缀,所以要从后往前放,~~但是直接贪心放是错的~ ...
分类:
其他好文 时间:
2018-10-20 17:26:51
阅读次数:
216
一、题目 1、审题 2、分析 给出一个升序的整形数组,当两个元素之和为 target ,输出这两个元素的下标。(只有一组符合的数) 二、解答 1、思路: 方法一、 采用两个指针,start 从前向后移动,end 从后向前移动;当 num[start] + num[end] = target 时,输出 ...
分类:
其他好文 时间:
2018-10-16 02:05:36
阅读次数:
305
1. 题目 请判断一个链表是否为回文链表。 示例 1: 输入: 1 2 输出: false 示例 2: 输入: 1 2 2 1 输出: true 进阶: 你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 2. 思路 此题可以看做是 "反转链表" 和 "链表中间结点" 的结合。 定义快 ...
分类:
其他好文 时间:
2018-10-13 22:52:17
阅读次数:
185