剑指Offer
剑指Offer题解
jiangkun0331
Bugs总是让我们无法心安
展开
-
【NowCoder】最大连续数列和
对于一个有正有负的整数数组,请找出总和最大的连续数列。给定一个int数组A和数组大小n,请返回最大的连续数列的和。保证n的大小小于等于3000。测试样例:[1,2,3,-6,1]返回:6解释:[1, 2, 3]输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。思路:需要明白一点,类似于:[2, -1, 100, 5, 34, -50]这样的数组,因为 2+(-1) = 1的,对结果值有增益效果,所以可以保原创 2020-07-17 10:44:56 · 179 阅读 · 0 评论 -
剑指Offer 52.两个链表的第一个公共结点
输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)两个链表的第一个公共节点...原创 2020-04-28 16:58:39 · 150 阅读 · 0 评论 -
剑指Offer 25.合并两个有序链表
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解决思路:定义一个虚拟头节点把新的链表连接起来,同时定义一个temp节点记录链表的尾巴,找到小的就直接插入尾巴;当两个链表都不空的时候进入循环,比较两个链表的对应位置上的val大小;判断循环结束的原因是什么,l1空,还是l2空,或者都是空;当l1空的时候,记得把l2连起来;当l2空的时候,记得...原创 2020-04-28 16:55:46 · 142 阅读 · 0 评论 -
剑指Offer 24.反转链表
输入一个链表,反转链表后,输出新链表的表头。解决思路:需要定义四个节点; 为了解决反转当前节点的时候找不到前驱节点,那我们就需要一个节点来保存当前节点的前驱节点; 同时定义cur表示当前反转的节点; curNext是下一个需要反转的节点,需要注意,cur不为空的时候才有curNext,否则就会空指针异常; 最最最重要的是要把反转后的新链表的头节点存起来,就是newHead;...原创 2020-04-28 16:53:19 · 174 阅读 · 0 评论 -
剑指Offer 23.链表中环的入口结点
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。解决思路:判断是否有环的思路还是和之前的一样:环形链表在有环的情况下,此时fast和slow已经相遇,通过下面的推导可以知道:让slow回到链表的头节点处fast和slow以同样的速度一起往前走相遇的地方就是环的入口节点 public ListNode EntryNodeOfLoop(ListNode p...原创 2020-04-28 16:44:52 · 161 阅读 · 0 评论 -
剑指Offer 22.链表中倒数第k个结点
输入一个链表,输出该链表中倒数第k个结点。解决思路:定义两个快慢指针fast,slow倒数第k个节点就是让fast节点先走K - 1步如果fast还没走k - 1步,fast.next就是空,那就不存在要找的节点然后两个同时往后走,当fast.next为空的时候就走到链表尾slow就是倒数第k个节点public ListNode FindKthToTail(ListNode ...原创 2020-04-28 16:41:02 · 149 阅读 · 0 评论 -
剑指Offer 6.从尾到头打印链表
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。实现思路:先把链表进行翻转从尾到头插入ArrayListCode:public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { //先反转链表 ListNode prev = null; ...原创 2020-04-28 16:32:56 · 101 阅读 · 0 评论 -
剑指Offer 10-I.斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39计算斐波那契数列无非两种办法,要么递归要么迭代随着参数的变大,程序的效率是非常低下的,而且当n值过大,容易产生栈溢出的可能,明显这样的递归方法是低效的。我们直接采用迭代第三项的值为前两项之和,这道题要从第0项开始算起,那么代码张手就来… public int Fibon...原创 2020-04-21 23:36:20 · 309 阅读 · 0 评论 -
剑指Offer 15.二进制中1的个数
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。用1和n进行位与运算n的最右边那位如果是1,1的个数就加1因为负数右移时,在最高位补得是1该解法如果输入时负数会陷入死循环所以我们使用下面的算法:用1(1自身左移运算,其实后来就不是1了)和n的每位进行位与,来判断1的个数public class Solution { public int NumberOf1...原创 2020-04-14 21:39:54 · 143 阅读 · 0 评论 -
剑指Offer 10-II.青蛙跳台阶问题
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个n级的台阶总共有多少种跳法?如果只有1级台阶,那显然只有一种跳法如果有2级台阶,那么就有2种跳法,一种是分2次跳。每次跳1级,另一种就是一次跳2级果台阶级数大于2,记为n的话,这时我们把n级台阶时的跳法看成n的函数,记为f(n),第一次跳的时候有2种不同的选择:一是第一次跳一级,此时跳法的数目等于后面剩下的n-1级台阶的跳法...原创 2020-04-14 21:20:19 · 333 阅读 · 0 评论 -
剑指Offer 5.替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。话不多说直接上代码:package $5;/** * @author PineappleSnow * @version 1.0 * @date 2020/4/7 17:17 *5.替换空格 * */public clas...原创 2020-04-07 20:54:23 · 175 阅读 · 1 评论