题目描述 给定一个单链表的表头节点head,实现一个调整单链表的函数,是的每k个节点之间逆序,如果最后不够k个节点一组,则不调整最后几个节点. 题解 内部函数reverse实现链表beg到end的翻转,以及与l和r的连接. 外部函数reverseKNodes实现区间的移动(即四个实参的更新),以及整个链表头节点的赋值. 时间复杂度O(n),额外空间复杂度O(1) 代码 public class Main { public static void main(String args[]) { Nod…
[题目]给定一个单链表的头节点head,实现一个调整单链表的函数,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点.例如:链表:1->2->3->4->5->6->7->8->null,K = 3.调整后为:3->2->1->6->5->4->7->8->null.其中7.8不调整,因为不够一组.[解题思路]方法一:使用栈,每K个节点依次入栈,并依次删除然后栈弹出尾插法插入节点方法二:直接…
[说明]: 本文是左程云老师所著的<程序员面试代码指南>第二章中“将单链表的每K个节点之间逆序”这一题目的C++复现. 本文只包含问题描述.C++代码的实现以及简单的思路,不包含解析说明,具体的问题解析请参考原书. 感谢左程云老师的支持. [题目]: 给定一个单链表的头节点 head,实现一个调整单链表的函数,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点. 例如: 链表:1->2->3->4->5->6->7->8->N…
前言 以专题的形式更新刷题贴,欢迎跟我一起学习刷题,相信我,你的坚持,绝对会有意想不到的收获.每道题会提供简单的解答,如果你有更优雅的做法,欢迎提供指点,谢谢. 注:如果代码排版出现了问题麻烦通知我下,谢谢. [题目描述] 给定一个单链表的头节点head, 实现一个调整单链表的函数,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点. 例如: 链表:1->2->3->4->5->6->7->8->null, K = 3. 调整后:3-&g…
将单链表的每K个节点之间逆序 给定一个单链表的头节点head,实现一个调整链表的函数,使得每K 个节点之间逆序,如果最后剩下不够K 个节点,则不调整最后几个. 例如: 链表:1—>2—>3—>4—>5—>6—>7—>8—>null,k=3. 调整好后:3—>2—>1—>6—>5—>4—>7—>8—>null,其中7.8不调整,因为不够一组. [解析] 1. 首先从左到右遍历链表,如果栈的大小不等于k ,则不断的…
题目 给定一个单链表的头结点,实现一个调整单链表的函数,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点. 解答 使用栈结构 import java.util.Stack; public class Test{ static class Node{ public int val; public Node next; public Node(int val){ this.val=val; } } public static void main(String[] args) {…
给定一个单链表的表头节点head,实现一个调整单链表的函数,是的每k个节点之间逆序,如果最后不够k个节点一组,则不调整最后几个节点 思路: 如果k的值小于2,不调整.k<1 没有意义,k==1代表1个节点为1组进行逆序,原链表不变. 介绍两种方法: 方法一  利用栈结构 1.从左到右便利链表,如果栈的大小不等于k,就将节点不断压入栈中 2.当栈大小第一次到达k,凑齐了k个节点进行逆序.然后弹出,并且连接.第一组逆序完成后,记录新的头,同时第一组最后一个(原头)连接下一个节点 package TT…
样例 链表1-2-3-4-5-6-7-8-9-10 K=3 ,结果 3-2-1-6-5-4-9-8-7-10 java代码 /** * @Description:将单链表每K个节点之间逆序 * @Author: lizhouwei * @CreateDate: 2018/4/7 9:10 * @Modify by: * @ModifyDate: */ public class Chapter2_12 { public Node reverseK(Node head, int k) { if (h…
  第1章栈和队列 1设计一个有getMin功能的栈(士★☆☆☆) 1由两个栈组成的队列(尉★★☆☆) 5如何仅用递归函数和栈操作逆序一个栈(尉★★☆☆) 8猫狗队列(士★☆☆☆)10用一个栈实现另一个栈的排序(士★☆☆☆) 13用栈来求解汉诺塔问题(校★★★☆) 14生成窗口最大值数组(尉★★☆☆) 19构造数组的MaxTree(校★★★☆) 22求最大子矩阵的大小(校★★★☆) 26最大值减去最小值小于或等于num的子数组数量(校★★★☆) 31第2章链表问题34打印两个有序链表的公共部分(…
原文链接 这是一本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现.针对当前程序员面试缺乏权威题目汇总这一痛点,本书选取将近200道真实出现过的经典代码面试题,帮助广大程序员的面试准备做到万无一失.“刷”完本书后,你就是“题王”!__eol__本书采用题目+解答的方式组织内容,并把面试题类型相近或者解法相近的题目尽量放在一起,读者在学习本书时很容易看出面试题解法之间的联系,使知识的学习避免碎片化.书中将所有的面试题从难到易依次分为“将.校.尉.士”四个档次,…
题目 在单链表和双链表中删除倒数第K个节点 java代码 /** * @Description:在单链表和双链表中删除倒数第K个节点 * @Author: lizhouwei * @CreateDate: 2018/4/6 9:14 * @Modify by: * @ModifyDate: */ public class Chapter2_2 { public Node removeKNode(Node head, int k) { if (head == null || k < 1) { re…
题目 去掉字符串中连续出现k 个0 的子串 java代码 package com.lizhouwei.chapter5; /** * @Description: 去掉字符串中连续出现k 个0 的子串 * @Author: lizhouwei * @CreateDate: 2018/4/23 21:34 * @Modify by: * @ModifyDate: */ public class Chapter5_3 { public String removeKZero(String str, in…
题目 在其他数都出现k 次的数组中找到只出现一次的数 java 代码 package com.lizhouwei.chapter7; /** * @Description: 在其他数都出现k 次的数组中找到只出现一次的数 * @Author: lizhouwei * @CreateDate: 2018/4/28 21:20 * @Modify by: * @ModifyDate: */ public class Chapter7_6 { public int getOnceNum(int[] a…
[题目]分别实现两个函数,一个可以删除单链表中倒数第K个节点,另一个可以删除双链表中倒数第K个节点.[要求]如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1).[题解]从头遍历链表,每移动一次,K--,直至移动到链表尾部,此时k>0,说明k太大,链表不用删除k==0,链表长度即是k, 删除头结点即可k<0,再次重头遍历链表,每移动一次,k++,当k==0时,此时结点为要删除结点的前结点,使其指向下一个结点即可双向链表一样,只不过需要注意前结点就好 #include <i…
[问题]介绍一种时间复杂度O(N),额外空间复杂度O(1)的二叉树的遍历方式,N为二叉树的节点个数无论是递归还是非递归,避免不了额外空间为O(h),h 为二叉树的高度使用morris遍历,即利用空节点空间morris遍历:[思路:]空间复杂度O(1)的要求很严格.常规的递归实现是显然不能满足要求的[其空间复杂度是树的深度O(h)].本篇文章介绍著名的Morris遍历,该方法利用了二叉树结点中大量指向null的指针. 常规的栈结构遍历方式,遍历到某个节点之后并不能回到上层的结点,这是由二叉树本身的…
题目 例如 1-2-3-4 删除2,1-2-3-4-5 删除3 例如 a=1,b =2 java代码 /** * @Description:删除中间节点和a/b处节点 * @Author: lizhouwei * @CreateDate: 2018/4/6 10:12 * @Modify by: * @ModifyDate: */ public class Chapter2_3 { //删除中间节点 public Node removeMidNode(Node head) { if (head…
题目 遍历二叉树的神级方法 morris java代码 package com.lizhouwei.chapter3; /** * @Description:遍历二叉树的神级方法 morris * @Author: lizhouwei * @CreateDate: 2018/4/14 17:15 * @Modify by: * @ModifyDate: */ public class Chapter3_5 { //morris中序 public void morrisInOrder(Node h…
题目 给定整数数组arr和整数num,共返回多少的数组满足如下情况 max(arr[i...j]) - min(arr[i...j]) <= num max(arr[i...j])表示数组arr[i...j] 中最大值,min(arr[i...j])表示数组arr[i...j] 中最小值 java代码 /** * @Description:最大值减去最小值小于或等于num的数量 * @Author: lizhouwei * @CreateDate: 2018/4/6 0:55 * @Modify…
题目 给出一个无重复元素的数组,构造此数组的MaxTree, java代码 /** * @Description: 构造数组的MaxTree * @Author: lizhouwei * @CreateDate: 2018/4/5 22:16 * @Modify by: * @ModifyDate: */ public class Chapter1_8 { public Node getMaxTree(int[] arr) { if (arr == null) { return null; }…
题目 实现一个特殊的栈,在实现栈的基本功能上,再实现返回栈中最小的元素的操作 要求 1. pop.push.getMin操作时间复杂度都是O(1) 2. 设计的栈类型可以使用现成的栈结构 java代码 /** * @Description:设计一个有getMin功能的栈 * @Author: lizhouwei * @CreateDate: 2018/4/5 9:54 * @Modify by: * @ModifyDate: */ public class Chapter1_1 { privat…
题目待续.... Tarjan算法与并查集解决二叉树节点间最近公共祖先的批量查询问题 java代码…
题目 判断t1 树中是否有与t2 树拓扑结构完全相同的子树 java代码 package com.lizhouwei.chapter3; /** * @Description: 判断t1 树中是否有与t2 树拓扑结构完全相同的子树 * @Author: lizhouwei * @CreateDate: 2018/4/19 21:35 * @Modify by: * @ModifyDate: */ public class Chapter3_12 { public boolean isSubTre…
题目 二叉树按层打印和ZigZag打印 java代码 package com.lizhouwei.chapter3; import java.util.LinkedList; import java.util.Queue; /** * @Description:二叉树按层打印和ZigZag打印 * @Author: lizhouwei * @CreateDate: 2018/4/14 21:47 * @Modify by: * @ModifyDate: */ public class Chapt…
[题目]给定链表的头节点head,实现删除链表的中间节点的函数.例如:不删除任何节点:1->2,删除节点1:1->2->3,删除节点2:1->2->3->4,删除节点2:1->2->3->4->5,删除节点3:进阶:给定链表的头节点head.整数a和b,实现删除位于a / b处节点的函数.例如:链表:1->2->3->4->5,假设a / b的值为r.如果r等于0,不删除任何节点:如果r在区间(0,1 / 5]上,删除节点…
题目 给定两个有序数组arr1和arr2,再给定一个整数k,返回所有的数中第k小的数. 题解 利用题目"在两个长度相等的排序数组中找到第上中位数"的函数 分类讨论 k < 1 || k > lenShort + lenLong,无. k <= lenShort,在两个数组前k个做二分. k > lenLong,判断两个特例位置(特例部分是因为好计算可直接返回结果,并且抛去特例可满足两数组剩余待二分部份长度相等的条件),否则二分. lenShort<k<…
题目 例:arr=[2,1,5,3,6,4,8,9,7] ,最长递增子序列为1,3,4,8,9 题解 step1:找最长连续子序列长度 dp[]存以arr[i]结尾的情况下,arr[0..i]中的最长递增子序列的长度. 额外加一个ends[]数组,初始化ends[0]=arr[0],其他为0.有一个有效区ends[0,r],只有有效区内的数才有意义.ends[i]=num表示遍历到目前,所有长度i+1的递增序列中,结尾最小的数时num. 遍历arr[i]时,在ends有效区找最左边>=arr[i…
问题描述 字符串str,模式串exp. 必须保证str中无'.'和'星号'字符,并且exp中'星号'不出现在首位,且无连续两个'星号'.PS星号是字符只是暂时没找到markdown的星号转义字符. '.'可以匹配任意一个字符,'星号'可以匹配0-多个星号前面的一个字符的情况. 输出可否匹配. 例: str="abc",exp="a.c" ,true str="abc",exp=".星号",true str="&quo…
题目链接 https://www.nowcoder.com/practice/6a296eb82cf844ca8539b57c23e6e9bf?tpId=13&tqId=11182&tPage=2&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题目描述 从无序序列,找到最小topk个元素. 解题思路 使用大根堆维护最小topk个元素: - 首先前k个元素建立大根堆(从…
题目 数组的partition 调整 java代码 package com.lizhouwei.chapter8; /** * @Description: 数组的partition 调整 * @Author: lizhouwei * @CreateDate: 2018/5/9 21:24 * @Modify by: * @ModifyDate: */ public class Chapter8_23 { public void leftUnique(int[] arr) { if (arr ==…
题目 打印N 个数组整体最大的Top K java代码 package com.lizhouwei.chapter8; /** * @Description: 打印N 个数组整体最大的Top K * @Author: lizhouwei * @CreateDate: 2018/5/9 20:11 * @Modify by: * @ModifyDate: */ public class Chapter8_20 { public void printTopK(int[][] matrix, int…