给定一个链表的头节点head,判断是否是回文结构 1->2->1 返回true 进阶: 如果链表长度N,时间复杂度O(N) 额外空间O(1) 方法一 利用栈结构(需要额外空间) 从左到右遍历,一次压栈。 这样的到的 从栈顶到栈底的节点值出现顺序会与原链表从左到右的值出现顺序相反。 废话不多说,上代码 ...
分类:
编程语言 时间:
2017-09-10 12:27:15
阅读次数:
164
给定单链表的表头节点head, 以及两个整数from 和 to, 在单向链表上把fro个节点到第to个节点这一部分进行反转 思路: 本题 有可能存在换头的问题,所以函数应该返回调整后的新的头节点 1 判断是否满足 1<=from<=to<=N 如果不满足,直接返回原来的头节点 2 找到第from-1 ...
分类:
编程语言 时间:
2017-09-09 22:38:52
阅读次数:
343
分别实现反转单向和双向链表的函数 看代码: 反向双向链表 ...
分类:
编程语言 时间:
2017-09-09 20:55:36
阅读次数:
154
给定链表的表头节点head,实现删除链表的中间节点的函数 推展: 给定链表的头节点,整数a 和 整数 b,实现删除a/b处节点的函数 先来分析原问题, 长度1 直接返回 长度2 将头节点删除 长度3 删除第二个 长度4 删除第二个 长度5 删除第三个。。。。。。长度每增加2 删除的节点就向后移动一个 ...
分类:
编程语言 时间:
2017-09-09 20:14:54
阅读次数:
164
分别实现两个函数,一个可以删除单链表中倒数第k个节点,另一个可以删除双链表中倒数第k个节点 思路: 如果链表为空,或者k<1 参数无效 除此之外 让链表从头开始走到尾,每移动一步,就让k的值减1 当链表走到头时候 如果k值大于0 说明不用调整 因为链表根本没有倒数第k个节点 此时将原链表直接返回即可 ...
分类:
编程语言 时间:
2017-09-09 18:07:45
阅读次数:
241
给定一个无序整型数组arr,找到数组中未出现的最小正整数 解题思路非常好,需要好好学习一下,很逻辑 如果arr长度为N, 最优解可以做到时间复杂度O(N) 额外空间复杂度O(1) 1、遍历arr之前生成两个变量, l r 初始值 l=0 r=N 2、从左到右遍历arr,arr[l] 3、如果arr[ ...
分类:
编程语言 时间:
2017-09-09 12:56:40
阅读次数:
134
给定两个有序链表的头指针 head1 和 head2,打印两个链表的公共部分 思路: 有序嘛, 如果head1 的值小于 head2, head1往下移动 如果head2的值小于head1,head2往下移动 如果相等,打印这个值,然后同时向下移动 两个有一个为null, 整个过程停止 ...
分类:
编程语言 时间:
2017-09-09 12:55:16
阅读次数:
155
给定一个有序数组arr, 调整arr使得这个数组的左半部分没有重复元素且升序,而且不用保证右边是否有序 分区就ok了 u区是 无重复且升序的 u是这个区域的最后位置,初始u=0 i做从左到右的遍历,在arr[u+1....i]上是不保证没有重复元素且升序的区 i是这个区域的最后位置 i向右移动 因为 ...
分类:
编程语言 时间:
2017-09-08 18:33:25
阅读次数:
149
给定一个整型数组arr,返回不包含本位置的乘数组 一般做法是用除法,新方法: 一个位置上 除去 自己值的累乘,就是自己左边的累乘再乘以自己右边的累乘,即 res[i]=lr[i-1]*rl[i+1] 最左的位置 和 最右的位置 比较特殊, 即 res[0]=rl[1] , res[N-1]=lr[N ...
分类:
编程语言 时间:
2017-09-08 16:16:22
阅读次数:
150
给定一个矩阵matrix, 其中的值有正 负 0 ,返回子矩阵的最大累加和 这个是 子数组最大累加和问题的 升级版 看例子就懂了: 如果只有两行,那么 上下两行相加,得出列加数组 得出最大累加和 总结整个过程,关键之处在于: 用求累加数组的最大累加和是的的方式得到每一步的最大子矩阵的累加和 每一步的 ...
分类:
编程语言 时间:
2017-09-08 13:36:49
阅读次数:
259