剑指Offer
猫不夜行
静水流深,物我两忘
展开
-
剑指Offer编程题(Java实现)——二维数组中的查找
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路根据排序特点,该二维数组中的一个数,小于它的数一定在其左边,大于它的数一定在其下边。因此,从右上角开始查找,就可以根据 target 和当前元素的大小关系来缩小查找区间,当前...原创 2019-07-23 22:49:00 · 123 阅读 · 0 评论 -
剑指Offer编程题(Java实现)——替换空格
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解题思路1在字符串尾部填充任意字符,使得字符串的长度等于替换之后的长度。因为一个空格要替换成三个字符(%20),因此当遍历到一个空格时,需要在尾部填充两个任意字符。令 P1 指向字符串原来的末尾位置,P2 指向字符串...原创 2019-07-24 00:15:00 · 79 阅读 · 0 评论 -
剑指Offer编程题(Java实现)——数组中的重复数字
题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。解题思路要求时间复杂度 O(N),空间复杂度 O(1)。因此不能使用排序的方法,也不能使用额外的标记数组。对...原创 2019-07-24 00:23:00 · 105 阅读 · 0 评论 -
剑指Offer编程题(Java实现)——从尾到头打印链表
题目描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。解题思路思路一:使用头插法使用头插法可以得到一个逆序的链表。遍历链表,每次将所遍历节点插入到链表的头部。头结点和第一个节点的区别:头结点是在头插法中使用的一个额外节点,这个节点不存储值; 第一个节点就是链表的第一个真正存储值的节点。/*** public class ListNod...原创 2019-08-07 00:40:00 · 157 阅读 · 0 评论 -
剑指Offer编程题(Java实现)——反转链表
题目描述输入一个链表,反转链表后,输出新链表的表头。思路一使用头插法迭代进行反转实现/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solutio...原创 2019-08-08 18:36:00 · 130 阅读 · 0 评论 -
剑指Offer编程题(Java实现)——链表中倒数第k个结点
题目描述输入一个链表,输出该链表中倒数第k个结点。注意:该题目不可以用先反转链表再输出第k个结点的方式,因为反转链表会改变该结点的next指向思路一使用栈Stack倒序存储,顺序pop第k个结点实现/*public class ListNode { int val; ListNode next = null; ListNode(int ...原创 2019-08-08 18:47:00 · 99 阅读 · 0 评论 -
剑指Offer编程题(Java实现)——复杂链表的复制
题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路第一步,在每个节点的后面插入复制的节点。第二步,对复制节点的 random 链接进行赋值。第三步,拆分。实现/*publi...原创 2019-08-08 18:52:00 · 75 阅读 · 0 评论 -
剑指Offer编程题(Java实现)——删除链表中重复的结点
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5public class ListNode { int val; ListNode next = null; ListNode(...原创 2019-08-08 19:06:00 · 78 阅读 · 0 评论 -
剑指Offer编程题(Java实现)——两个链表的第一个公共结点
题目描述:输入两个链表,找出它们的第一个公共结点。思路一:设 A 的长度为 a + c,B 的长度为 b + c,其中 c 为尾部公共部分长度,可知 a + c + b = b + c + a。当访问链表 A 的指针访问到链表尾部时,令它从链表 B 的头部重新开始访问链表 B;同样地,当访问链表 B 的指针访问到链表尾部时,令它从链表 A 的头部重新开始访问链表 A。这样就...原创 2019-08-08 19:12:00 · 71 阅读 · 0 评论 -
剑指Offer编程题(Java实现)——链表中环的入口结点
题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。思路一迭代遍历链表,利用HashSet将每个结点添加到哈希表中,如果添加失败(重复遍历了这个结点即遇到环),输出该结点为环入口实现/* public class ListNode { int val; ListNode next = null; ListNode(...原创 2019-08-08 19:21:00 · 94 阅读 · 0 评论