LeetCode
zhouzhou_98
所谓的焦虑就是书读的太少,而想的又太多
展开
-
25. K 个一组翻转链表
关于单链表倒置。有了单链表倒置,这道题无非就是用一个循环,每次将 k 个结点取下来,倒置后再接回去,然后再取 k 个,以此循环,到了最后一组如果不足 k 个,不做处理,直接返回头结点就可以了。所以关键就是,指针指来指去,大家不晕掉就好,我做了图示,大家参考一下。为了将头结点也一般化,我们创建一个 dummy 结点,然后整个过程主要运用三个指针, tail 指针表示已经倒置后的链表的尾部,subhead 指针表示要进行倒置的子链表,toNull 指针为了将子链表从原来链表中取下来。一个 while转载 2020-05-27 16:59:31 · 165 阅读 · 0 评论 -
138复制带随机指针的链表
链接:https://leetcode-cn.com/problems/copy-list-with-random-pointer/相似题目连接:https://leetcode-cn.com/problems/fu-za-lian-biao-de-fu-zhi-lcof/思路:链表的深拷贝可以利用到HashMap,进行两次遍历,第一次进行赋初始值,第二遍对random和next值进行初始化 public Node copyRandomList(Node head) { ...原创 2020-05-27 16:20:21 · 130 阅读 · 0 评论 -
回文链表
链接地址:https://leetcode-cn.com/problems/palindrome-linked-list/相似的题目连接:https://leetcode-cn.com/problems/palindrome-linked-list-lcci/思路:首先找到链表的中心节点,然后从中心节点的下一位开始进行翻转。然后以rHead!=null作为循环条件,lHead和rHead不断循环下去,不断比较,当出现节点比较不相等时,直接return false即可。需...原创 2020-05-27 15:42:41 · 3730 阅读 · 1 评论 -
86分割链表
链接:https://leetcode-cn.com/problems/partition-list/相似题目链接(题目几乎一模一样):https://leetcode-cn.com/problems/partition-list-lcci/思路:使用两个指针进行分割比k小的值放入A链表,其他的放入B链表,最后进行连接。注意点:最后一个rTail的next必须进行清空处理,防止后面的next仍然小于K值。像上图的5之后的2值。 public ListNode partit...原创 2020-05-27 14:29:40 · 155 阅读 · 0 评论 -
160相交链表
链接: https://leetcode-cn.com/problems/intersection-of-two-linked-lists/相似题目连接(几乎一模一样):https://leetcode-cn.com/problems/intersection-of-two-linked-lists-lcci/https://leetcode-cn.com/problems/liang-ge-lian-biao-de-di-yi-ge-gong-gong-jie-dian-lcof/思路一开..原创 2020-05-27 14:02:43 · 185 阅读 · 0 评论 -
两数相加
链接地址: https://leetcode-cn.com/problems/add-two-numbers/思路:需要考虑三个值,第一个链表的值,第二个链表的值,两个链表相加之后的进位值循环条件则为当两个表同时为空的时候才截至。具体流程为:从l1和l2取出值,判断是否为空,为空给赋值上0,否则为其对应值,创建新链表,将l1和l2对应值分别赋值给v1、v2,用sum加上v1和v2的值和进位的值(一开始进位为0),然后对sum/10,将进位求出赋值,链表的元素则进行模10得出个位赋...原创 2020-05-27 10:50:29 · 172 阅读 · 0 评论 -
移除链表元素
链接地址:https://leetcode-cn.com/problems/remove-linked-list-elements/思路:这道题目解决起来挺简单的,重新创建一个带有虚拟头结点的新链表,然后让原有链表不断循环下去,当循环到的值与给定值不相等时,将其与新链表进行连接,否则不连接。假如删除掉4:因为创建了一个虚拟头结点0,而0又不包含在链表内部,返回的时候,返回head.next即可。代码如下:(这里提供两套解决题目的方案,一套是不加虚拟头结点,一套使用了虚拟...原创 2020-05-27 09:59:16 · 143 阅读 · 0 评论 -
最大间距
链接:https://leetcode-cn.com/problems/maximum-gap/思路:由于现有的基于比较的排序算法基本超过O(n),所以就不能采用现有的比较算法,而又要达到线性阶的时间复杂度,我们可以使用不是基于比较的排序算法。例如桶排序、计数排序、基数排序由于使用计数排序、计数排序属于大规模消耗空间的排序算法,在这里我们使用桶排序算法。我们把 0 3 4 6 23 28 29 33 38 依次装到三个箱子中0 1 ...原创 2020-05-23 22:27:12 · 614 阅读 · 0 评论 -
有序数组的平方
链接:https://leetcode-cn.com/problems/squares-of-a-sorted-array/思路与LeetCode88题一样,只是稍微进行点修改因为数组是有序的,只要把负数单独摘出,平方后逆序插入新数组就可以解决问题。 1 2 3 0 0 0 2 5 6由于数组已经是排好顺序的,最末尾的元素必定时最大的,我们只要对最末尾的元素进行比较,将最末尾的元素放到最尾端,然后不断进行比较即可,而这里我们需要用到3个指针。一个指针指向nums1数组的最后一个值...原创 2020-05-23 14:59:37 · 652 阅读 · 0 评论 -
面试16_16
链接地址:https://leetcode-cn.com/problems/sub-sort-lcci/寻找最短序列从数学的角度上来看就是寻找最后一个逆序对的位置,逆序对就是在一个顺序的数组中,出现一个不按顺序排列的值,比如 [1 3 4 2 6 8] 其中原数组原本是个从小到大排序的,其中2是不按顺序排序,2就是个逆序对从右边往左,找到最后一个变小的数字从左往右,找到最后一个变大的数字 public int[] subSort(int[] arra...原创 2020-05-23 10:50:08 · 210 阅读 · 0 评论 -
75颜色分类
链接地址:https://leetcode-cn.com/problems/sort-colors/这道题目看起来简单,实际由于规定了各种各样的条件,不能采用传统的排序算法来做,否则报超时。实际上这道题目也是用索引指针来做,需要利用一些规律。同时,通过让红色指针不断循环下去,来进行判断,直到红色指针的索引大于紫色指针方可进行中断循环。为什么不能红色指针不能等于紫色指针呢,当出现以下这种情况:此时按照规律,红色指针的2和紫色指针的0进行交换,同时紫色指针--...原创 2020-05-23 10:21:38 · 410 阅读 · 0 评论 -
88合并两个有序数组
刷题链接:https://leetcode-cn.com/problems/merge-sorted-array/在这里提供两套解题思路: 直接将nums1后续的值填满,调用Arrays.sort()函数直接进行排序。 使用该方法解题的关键:如何把nums2的值成功赋值到nums1的末尾呢,关注索引。首先,我们能够得到nums1的总长度nums1.length或者m+n,nums1第一个为0的值即为m,也就是说循环的起点为m。而nums2如何获取它的索引呢,首先能够获得nums1的..原创 2020-05-23 10:00:51 · 176 阅读 · 0 评论