<剑指offer>解题笔记 <剑指offer>共50题,这两周使用C++花时间做了一遍,谨在此把一些非常巧妙的方法.写代码遇到的难点.易犯错的细节等做一个简单的标注,但不会太过具体.具体算法还是请參考书本. 做的比較急,代码还有非常多不完好的地方,如有错误.欢迎改正,地址为:github:sword_of_offer. 能够使用git clone https://github.com/heLomaN/sword_of_offer.git命令获代替码. 当中,少数无法验证正确与否的题…
今天主要写了一下offer 1-41题,余下的稍后整理 1 """ 1 镜像二叉树: 递归 """ def mirror(root): if not root: return None mirror(root.left) mirror(root.right) root.left, root.right = root.right, root.left return root """2. 链表环入口 "&quo…
题目描述: 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 分析: 平衡二叉树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树,同时,平衡二叉树必定是二叉搜索树,反之则不一定.平衡二叉树的常用实现方法有红黑树.AVL.替罪羊树.Treap.伸展树等. 根据定义两个子树的高度差的绝对值不超过1,那么可以通过递归求出左右子树的高度,计…
题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 牛客网链接 java代码 import java.lang.Math; public class Solution { public boolean IsBalanced_Solution(TreeNode root) { if (root == null) return true; return getDeepth(root) != -1; } private int getDeepth(TreeNode root) { if (roo…
面试35题: 题目:复杂链表的复制 题:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 解题思路一:“Python作弊法” 解题代码: # -*- coding:utf-8 -*- # class RandomListNode: # def __init__(self, x): # self.label = x # self.ne…
面试11题: 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1. NOTE:给出的所有元素都大于0,若数组大小为0,请返回0 解题思路:二分查找,以及分情况考虑(稍显麻烦)详见:剑指offer P83 解题代码: # -*- coding:utf-8 -*- class Solution: def minNumberInRo…
面试14题: 题目:剪绳子 题:给你一根长度为n的绳子,请把绳子剪成m段(m,n都是整数,且n>1,m>1),每段绳子的长度记为k[0],k[1],k[2],...,k[m].请问k[0]*k[1]*...*k[m]可能的最大乘积是多少?例如,当绳子的长度为8时,我们把它剪成长度分别为2,3,3的三段,此时得到的最大乘积为18. 解题思路:基于动态规划和贪婪算法,详见剑指offer P96 解题代码: # -*- coding:utf-8 -*- class Solution: def Max…
面试17题: 题目:打印从1到最大的n位数 题:输入数字n,按顺序打印出从1到最大的n位十进制数,比如输入3,则打印出1.2.3一直到最大的3位数999. 解题思路:需要考虑大数问题,这是题目设置的陷阱.可以把问题转换成数字排列问题,用递归让代码更简洁. 参见剑指offer P114 解题代码: # -*- coding:utf-8 -*- class Solution: def Print1ToMaxOfNDigits(self, n): if n<=0: return number=[']*…
面试62题: 题目:圆圈中最后剩下的数字 题:0,1,...,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字.求出这个圆圈里剩下的最后一个数字. 解题思路:约瑟夫环问题,可以根据数学规律找出高效的解法,具体如下,详见剑指offer. 解题代码: # -*- coding:utf- -*- class Solution: def LastRemaining_Solution(self, n, m): # write code here or m<: res= ,n+):…
[剑指Offer]合并两个排序的链表 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. Ways 合并两个有序的链表,暴力解法肯定不可取.可以采用下面的这个做法,很通用. # Definition for singly-linked list. # class ListNode…