
剑指offer
算法黑哥
喜欢算法,善于思考
展开
-
剑指offer 面试题14- I. 剪绳子(python3)
面试题14- I. 剪绳子给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m] 。请问 k[0]k[1]…*k[m] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例 1:输入: 2输出: 1解释: 2 = 1 + ...原创 2020-03-24 20:29:38 · 688 阅读 · 0 评论 -
剑指offer 面试题57. 和为s的两个数字(python3)
面试题57. 和为s的两个数字输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]示例 2:输入:nums = [10,26,30,31,47,60], target = 40输出:[10,30] 或者 ...原创 2020-03-24 00:19:53 · 316 阅读 · 0 评论 -
leetcode 160剑指offer面试题52. 两个链表的第一个公共节点(python3)
面试题52. 两个链表的第一个公共节点输入两个链表,找出它们的第一个公共节点。注意:如果两个链表没有交点,返回 null.在返回结果后,两个链表仍须保持原有的结构。可假定整个链表结构中没有循环。程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。本题与主站 160 题相同:https://leetcode-cn.com/problems/intersection-of-t...原创 2020-03-16 01:59:22 · 263 阅读 · 0 评论 -
剑指offer面试题68 - I. 二叉搜索树的最近公共祖先(python)
面试题68 - I. 二叉搜索树的最近公共祖先给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5...原创 2020-03-16 00:26:28 · 279 阅读 · 0 评论 -
leetcode 113 剑指offer 面试题34. 二叉树中和为某一值的路径(python3)
面试题34. 二叉树中和为某一值的路径# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution:...原创 2020-03-15 21:53:31 · 229 阅读 · 0 评论 -
leetcode 面试题32 - III. 从上到下打印二叉树 III(python3)
面试题32 - III. 从上到下打印二叉树 III请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。class Solution: def levelOrder(self, root: TreeNode) -> List[List[int]]: if not r...原创 2020-03-15 16:33:34 · 255 阅读 · 0 评论 -
leetcode 面试题32 (剑指offer)- II. 从上到下打印二叉树 II(python3)
面试题32 - II. 从上到下打印二叉树 II从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None#...原创 2020-03-15 16:24:08 · 348 阅读 · 0 评论 -
leetcode 面试题32(剑指offer) - I. 从上到下打印二叉树(python3)
面试题32 - I. 从上到下打印二叉树# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution:...原创 2020-03-15 13:30:47 · 379 阅读 · 0 评论 -
leetcode 剑指offer 面试题26. 树的子结构(python3)
面试题26. 树的子结构输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。思路 深度优先遍历定义2个函数:一个函数遍历 第二函数负责判断# Definition for a binary tree node.# class TreeNode:# def __init__(self, x...原创 2020-03-15 10:34:09 · 292 阅读 · 0 评论 -
剑指offer 面试题40. 最小的k个数(python3)
类似题 参考leetcode 215面试题40. 最小的k个数输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。示例 1:输入:arr = [3,2,1], k = 2输出:[1,2] 或者 [2,1]示例 2:输入:arr = [0,1,2,1], k = 1输出:[0]限制:0 <...原创 2020-03-06 13:24:45 · 372 阅读 · 0 评论 -
剑指offer面试题21. 调整数组顺序使奇数位于偶数前面(python3)
面试题21. 调整数组顺序使奇数位于偶数前面输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例:输入:nums = [1,2,3,4]输出:[1,3,2,4]注:[3,1,2,4] 也是正确的答案之一。思路1:时间空间复杂度都是O(n)该方法保证奇数和偶数的相对为止保持不变,可参考牛客网。class Soluti...原创 2020-03-06 09:43:23 · 364 阅读 · 0 评论 -
leetcode 53. 最大子序和(python3)
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。方法1:局部最优 全局最优class Solution: def...原创 2020-03-05 00:47:10 · 197 阅读 · 0 评论 -
剑指offer 16 数值的整数次方 (python实现)
第一种方法:遍历、时间复杂度为O(n)# -*- coding:utf-8 -*-class Solution: def Power(self, base, exponent): # write code here if exponent < 0: return 1/ self.Power(base,-exponent)...原创 2020-02-11 00:29:09 · 327 阅读 · 0 评论 -
剑指offer面试题25:合并2个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。重要的是思路。# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: ...原创 2020-01-04 16:24:17 · 129 阅读 · 0 评论 -
剑指offer 面试题39:数组中出现的次数超过一半的数字
类似题参考LeetCode169以及次数超过1/3的数字 LeetCode 229思路1:时间复杂度O(nlogn)排序完以后直接取最中间的那个数,因为该数字超过了一半思路二:投票法。时间复杂度O(n) 空间复杂度O(1)# -*- coding:utf-8 -*-class Solution: def MoreThanHalfNum_Solution(self, numb...原创 2020-01-02 16:35:30 · 143 阅读 · 0 评论 -
剑指offer(Python)面试题65:不用加减法乘除做加法
思路:不用加减乘除 肯定是用到了位操作。与& 、或| 、异或^ 、左移<< 、右移>>异或^ 相当于二进制进行相加 但是不进位。与& 之后再 左移<< 相当于进位。重复1、2步骤 直到进位 为0class Solution: def Add(self, num1, num2): m...原创 2019-12-31 17:02:09 · 272 阅读 · 0 评论 -
剑指offer(Python3)面试题11:旋转数组的最小数字
剑指offer这道题题一样,直接看这个就行原题连接假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。注意数组中可能存在重复的元素。示例 1:输入: [1,3,5]输出: 1示例 2:输入: [2,2,2,0,1]输出: 0说明:这道题是 寻找旋转排序数组...原创 2019-12-28 21:15:52 · 136 阅读 · 0 评论 -
剑指offer面试题24:leetcode206 反转链表 Python3实现
【原题连接】反转一个单链表。思路:三个指针 pre cur nxt示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL# Definition for singly-linked list.# class ListNode:# def __init__(self, x)...原创 2019-12-28 11:41:02 · 175 阅读 · 0 评论 -
剑指offer(Python)面试题28-对称的二叉树
题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 1 / \ 2 2 / \ / \ 3 4 4 3思路:根节点为空的二叉树也是对称二叉树self.isSymBT(tree1.left,tree2.right) and self.isSymBT(tree1.right,t...原创 2019-12-26 15:31:04 · 236 阅读 · 0 评论 -
剑指offer(Python)面试题27-二叉树的镜像python实现
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5Pyt...原创 2019-12-26 12:45:30 · 170 阅读 · 0 评论 -
剑指offer(Python)面试题6:从尾到头打印链表
书上的题目:牛客网上的题目题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。思路Python代码:(看清楚题目要求打印每个值,还是返回数组列表)# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.ne...原创 2019-12-26 11:09:51 · 410 阅读 · 0 评论 -
剑指offer(python)面试题4-二维数组中的查找
[原题连接]解题思路Python代码实现# -*- coding:utf-8 -*-class Solution: # array 二维列表 def Find(self, target, array): # write code here row = len(array)-1 col = len(array[0])-1 ...原创 2019-12-25 17:18:02 · 143 阅读 · 0 评论 -
剑指offer(python)面试题5:替换空格
Python代码思路1 Python自带的,但是面试不能写这个自带的class Solution: # s 源字符串 def replaceSpace(self, s): # write code here return s.replace(' ','%20')思路二:字符串—列表—字符串class Solution: # s...原创 2019-12-25 15:35:32 · 168 阅读 · 2 评论 -
剑指offer(Python)面试题8:二叉树的下一个节点
题目描述:解题方法分析二叉树的下一个节点,一共有以下情况:1.二叉树为空,则返回空;2.节点右孩子存在,则设置一个指针从该节点的右孩子出发,一直沿着指向左子结点的指针找到的叶子节点即为下一个节点;3.节点不是根节点。如果该节点是其父节点的左孩子,则返回父节点;否则继续向上遍历其父节点的父节点,重复之前的判断,返回结果。Python代码:# -*- coding:utf-8 -*-...原创 2019-12-25 12:09:24 · 287 阅读 · 0 评论 -
剑指offer 面试题7:重建二叉树 Python实现
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回根节点。算法设计思想前序遍历序列的第一个元素为根结点的值,然后在中序遍历序列中寻找根节点的值的位置(索引)。从中序遍历序列的起始位置到根结点的值的位置...原创 2019-12-24 11:59:10 · 208 阅读 · 0 评论 -
《剑指offer》第二版 题目分类学习 python
面试必刷-《剑指offer》刷题小结写在前面面试季来了,不管是作为面试者还是以后作为面试官,了解算法这门程序员之间的沟通方式都是非常必要的。找过工作的朋友应该都听说过《剑指offer》,笔者也是战5渣,本文主要对我这十多天刷过的《剑指offer》做个简单的分类小结,方便后面专项复(练)习~剑指offer推荐刷题地址:https://www.nowcoder.com/ta/coding-...原创 2019-12-15 10:52:23 · 793 阅读 · 1 评论 -
剑指offer(Python3实现) 面试题9-用两个栈实现队列
文章目录用两个栈实现一个队列用两个队列实现一个栈用两个栈实现一个队列用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。class MyQueue: def __init__(self): self.stack1 = [] self.stack2 = [] def push(self,...原创 2019-12-14 20:55:20 · 381 阅读 · 0 评论 -
剑指offer(第二版) Python3实现
剑指offer Python题解03.数组中重复的数字04.二维数组中的查找05.替换空格06.从尾到头打印链表07.重建二叉树08.二叉树的下一个节点09.用两个栈实现队列10.斐波那契数列11.旋转数组中的最小数字12.矩阵中的路径13.机器人的运动范围14.剪绳子15.二进制中 1 的个数16.数值的整数次方17.打印从1到最大的n位数18.删除列表中重复的...原创 2019-12-13 17:21:14 · 7168 阅读 · 10 评论