剑指offer
文章平均质量分 61
是我,Zack
就职于某公司大数据部,负责开发、实施、运维相关工作,喜欢边学习边笔记,热衷分享、开源,有大数据方向感兴趣的小伙伴欢迎多多交流~
展开
-
剑指offer JZ16:合并两个排序的链表(伪头节点,清晰图解)
解题思路:根据题目描述, 链表 l1、l2是 递增 的,因此容易想到使用双指针l1、l2遍历两链表,根据l1.val、l2.val 的大小关系确定节点添加顺序,两节点指针交替前进,直至遍历完毕。引入伪头节点: 由于初始状态合并链表中无节点,因此循环第一轮时无法将节点添加到合并链表中。解决方案:初始化一个辅助节点 dum 作为合并链表的伪头节点,将各节点添加至 dum 之后。算法流程:1.初始化: 伪头节点 dum ,节点 cur 指向 dum 。2.循环合并: 当l1、l2为空时跳出;原创 2021-05-28 23:20:59 · 188 阅读 · 1 评论 -
剑指offer JZ15:反转链表(双指针,递归,妖魔化的双指针)
我清晰记得,以前在数据结构课上,老师和我们说:涉及到链表的操作,一定要在纸上把过程先画出来,再写程序。现在想想,这句话简直就是真理!方法一:好理解的双指针1.1 解题思路定义两个指针: prepre 和 curcur ;prepre 在前 curcur 在后。每次让 prepre 的 nextnext 指向 curcur ,实现一次局部反转局部反转完成之后, prepre 和 curcur 同时往前移动一个位置循环上述过程,直至 prepre 到达链表尾部1.2 动态图解原创 2021-05-28 23:19:44 · 127 阅读 · 0 评论 -
剑指offer JZ14:链表中倒数第k个结点(双指针,栈,递归3种解决方式)
【数据结构和算法】1,双指针求解这题要求链表的倒数第k个节点,最简单的方式就是使用两个指针,第一个指针先移动k步,然后第二个指针再从头开始,这个时候这两个指针同时移动,当第一个指针到链表的末尾的时候,返回第二个指针即可。注意,如果第一个指针还没走k步的时候链表就为空了,我们直接返回null即可。 public ListNode FindKthToTail(ListNode pHead, int k) { if (pHead == null) return原创 2021-05-28 23:16:05 · 199 阅读 · 0 评论 -
剑指offer JZ13:调整数组使奇数位于偶数前面(且相对位置不能改变)
简单思路,参考一下呀!题意:区分出奇数和偶数,按照原顺序奇数偶数顺序不变我的思路:开辟两组新的空间,我这里用的是LinkedList,因为想要用到队列的先进先出方法1、先找出奇数利用2余某个数不为零就是奇数(这里不考虑0的情况),那么余2是0那就是偶数啦2、然后奇数放在一个链表里面,偶数放在一个链表里面。链表不需要事先知道长度大小,所以用链表方便,数组是没法确定大小的。3、就先将放了奇数的链表一个一个出栈(poll函数)放在题目给的array中,然后就是偶数,思路中的很简单代码如下:import原创 2021-05-17 23:25:21 · 135 阅读 · 0 评论 -
剑指offer JZ11:二进制中1的个数
描述这是一篇面对初级coder的题解。知识点:二进制,位运算难度:一星题解方法一:暴力方法分析:题目给一个有符号的整数int,求整数转化成二进制数后,1的个数。直接根据题目的描述来提出方法一。有2个问题:问题1: 如何从十进制数转化到二进制数?问题2:转化为二进制数后,如果判断有1的个数?方法1:除2取模法。int val; // input dataint ans = 0;while (val != 0) { int tmp = val % 2; if (tm.原创 2021-05-17 23:23:36 · 247 阅读 · 0 评论 -
剑指offer JZ10.矩形覆盖 -Java实现
描述:这是一道规律题。知识点:递归,记忆递归,动态规划,递推难度::一星题解:方法一:递推对于这种题没有思路怎么办?那就对n 从小到大,一步步分析:n=1时,显然只有一种方法n=2时,如图有2种方法n=3,如图有3中方法n=4,如图有4种方法。如果到这里,还没有发现规律怎么办呢?那我们就再分析以下,从n=3到n=4,怎么来的呢?这里有2种情况:通过以上分析,发现刚好和图中的个数一样。直接在n=3的情况下,再后面中添加一个竖着的。这个很显然成立,有3种情况然后横着的原创 2021-05-17 23:22:37 · 112 阅读 · 0 评论 -
剑指Offer JZ09 变态跳台阶(数列推导)
题目来源:牛客网-剑指Offer专题题目地址:变态跳台阶题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。题目解析一:直接推导本质上是斐波那契数列的变种,普通跳台阶是一步与两步,问题规模缩小到分成最后要跳到第 n 阶可以跳两次或者一次去求解,所以,在普通跳台阶,设置两个临时变量存下跳一次或者两次时,前面会有多少种可能的结果dp 就是可以由什么状态推导出最后的状态,斐波那契数列是由前两种状态,而这里就是由前 n - 1 种状态推导出原创 2021-05-16 23:58:56 · 155 阅读 · 1 评论 -
剑指Offer JZ08 跳台阶(递推)-java实现
题目来源:牛客网-剑指Offer专题题目地址:跳台阶题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。题目解析这是一道经典的递推题目,你可以想如果青蛙当前在第n级台阶上,那它上一步是在哪里呢?显然,由于它可以跳1级台阶或者2级台阶,所以它上一步必定在第n-1,或者第n-2级台阶,也就是说它跳上n级台阶的跳法数是跳上n-1和跳上n-2级台阶的跳法数之和。**方法一:**面试别写型递推版实现,时间复杂度public c原创 2021-05-16 23:55:56 · 138 阅读 · 1 评论 -
剑指offer JZ07.斐波那契数列 (递归、动态规划、优化储存、持续优化)java实现
描述此题是非常经典的入门题了。我记得第一次遇到此题是在课堂上,老师拿来讲“递归”的(哈哈哈)。同样的类型的题还有兔子繁殖的问题。大同小异。此题将用三个方法来解决,从入门到会做。考察知识:递归,记忆化搜索,动态规划和动态规划的空间优化。难度:一星题解方法一:递归题目分析,斐波那契数列公式为:f[n] = f[n-1] + f[n-2], 初始值f[0]=0, f[1]=1,目标求f[n]看到公式很亲切,代码秒秒钟写完。public class Solution { public int F.原创 2021-05-16 23:53:09 · 172 阅读 · 0 评论 -
剑指offer JZ06:旋转数组的最小数
描述这是一道对二分查找算法灵活运用的一道题目。二分查找算法不限于运用在有序数组上。如果能够明确二分之后,答案存在于二分的某一侧,就可以使用二分。本题就是如此。难度:二星考察知识:数组,二分查找题解方法一:暴力方法:直接遍历一遍数组,即可找到最小值。但是本题的附加条件就没有用上。肯定不是面试官所期望的答案。方法二:二分查找这种二分查找难就难在,arr[mid]跟谁比.我们的目的是:当进行一次比较时,一定能够确定答案在mid的某一侧。一次比较为 arr[mid]跟谁比的问题。一般的比较原则有:原创 2021-05-12 13:12:16 · 74 阅读 · 2 评论 -
剑指offer JZ05:用两个栈实现队列
描述这是一道对栈和队列之间灵活转化的题目。难度:一星考察知识:队列,栈题解方法:模拟如果我知道队列是FIFO,栈是FILO,但是这道题我还是不知道怎么写怎么办?对于这种感觉不难,但是又不会写的,方法就是模拟。比如有如下操作:(pop操作确保栈中有元素)1push(1);push(2);pop(3);push(4);根据队列的特性,只能pop(1),pop(2),pop之后的结果上述是队列的操作。当push的时候,我们必须要用一个stack来存,假设用stack1来存。那么pus原创 2021-05-12 13:08:34 · 88 阅读 · 1 评论 -
剑指offer JZ1-5刷题笔记
A 参考资料书本《剑指offer(第二版)》JZ01 二位数组中的查找1.题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。[ [1,2,8,9], [2,4,9,12], [4,7,10,13], [6,8,11,15]]给定 target = 7,返回 true。给定 target = 3,返回 false。原创 2021-05-12 13:06:41 · 193 阅读 · 0 评论