自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 资源 (2)
  • 收藏
  • 关注

原创 【面试题】从上到下打印二叉树(三种题目变体+多种解题思路)

题目1这个问题实际上就是考察树的广度优先搜索,也就是按层遍历,BFS一般借助队列实现。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public int[] l

2020-06-30 10:13:15 230

原创 【面试题】包含min函数的栈(辅助栈法+无需辅助栈法)

题目描述解法一:辅助栈法普通栈的 push() 和 pop() 函数的复杂度为 O(1) ;而获取栈最小值 min() 函数需要遍历整个栈,复杂度为 O(N) 。为了将 min() 函数复杂度降为 O(1),可通过建立辅助栈实现。Javaclass MinStack { LinkedList<Integer> stack1, stack2; /** initialize your data structure here. */ public MinStack(

2020-06-29 12:28:54 327

原创 【面试题】顺时针打印矩阵(两种解法 Java实现)

题目描述由于是以从外圈到内圈的顺序依次打印, 我们可以把矩阵想象成若⼲个圈,循环打印,每次打印一个圈,循环结束的条件是当前圈的左上角坐标(startX,startY)满足 startX*2 >= cols && startY*2 >= rows我们可以把顺时针打印⼀圈分为四步走:第⼀步从左到右打印⼀⾏,第⼆步从上到下打印⼀列,第三步从右到左打印⼀⾏,第四步从下到上打印⼀列。不过,要注意的是,最后⼀圈有可能退化成只有⼀⾏、 只有⼀列, 甚⾄只有⼀个数字,此时打

2020-06-28 22:10:47 376

原创 【面试题】二叉树的子结构

题目描述第⼀步,在树A中查找与根结点的值⼀样的结点, 这实际上就是树的遍历。可以⽤递归的⽅法去遍历, 也可以⽤循环的⽅法去遍历。第⼆步,是判断树 A中以 R为根结点的⼦树是不是和树 B具有相同的结构。 同样也可以⽤递归的思路来考虑: 如果结点 R的值和树 B的根结点不相同, 则以 R为根结点的⼦树和树 B肯定不具有相同的结点; 如果它们的值相同, 则递归地判断它们各⾃的左右结点的值是不是相同。 递归的终⽌条件是我们到达了树A或者树B的叶结点。Java/** * Definition for

2020-06-27 16:49:11 178

原创 【面试题】链表中倒数第k个节点(两种解法)

题目描述为了实现只遍历链表⼀次就能找到倒数第k个结点, 我们可以定义两个指针,初始化均指向头结点。第⼀个指针 p1从链表的头指针开始遍历向前⾛ k-1 步, 第⼆个指针 p2保持不动;从第k步开始, 第⼆个指针也开始从链表的头指针开始遍历,即双指针共同移动;由于两个指针的距离保持在 k-1, 当第⼀个(⾛在前⾯的) 指针到达链表的尾结点时, 第⼆个指针(⾛在后⾯的) 指针与尾结点的距离为 k-1,正好是倒数第k个结点。考虑到代码的鲁棒性,还需要对一些特殊情况进行处理:输入链表为空输入链表

2020-06-27 10:58:48 346

原创 【面试题】打印从1到最大的n位数(大数表示问题)

题目描述解题思路考虑以下两个问题:最大的 n位数(记为 end)与位数 n之间的关系:例如,最大的 1位数是9,最大的 2位数是 99 ,最大的 3 位数是 999 ,以此类推,end=10n - 1大数越界问题:当 n 较大时,end 会超出 int32 整型的取值范围,超出取值范围的数字无法正常存储。(但由于本题要求返回 int 类型数组,相当于默认所有数字都在 int32 整型取值范围内,因此这里不用考虑大数越界问题。感觉 LeetCode 这么设置失去了剑指offer上这题的本意。。。)

2020-06-26 11:07:53 460

原创 【面试题】数值的整数次方(快速求幂法)

题目描述快速求幂法(利用二分思想)Java要注意的一点是,虽然题目中告诉我们不需要考虑大数问题,但是给出的 n 可以取到 -2147483648(int 整型负数的最小值,Java中 int变量 n∈[−2147483648,2147483647]),当 n = -2147483648 时,执行 n = -n 会因越界而赋值出错。因此,在编码的时候,需要先将 n 转换成 long 类型。class Solution { public double myPow(double x, int

2020-06-24 11:40:15 245

原创 【面试题】一文打尽位运算相关题目

二进制中1的个数解法一:逐位判断先判断输入的整数⼆进制表示中最右边⼀位是不是1,接着把整数右移⼀位,原来处于从右边数起的第⼆位被移到最右边了,再判断该位是不是1。 这样每次右移⼀位, 直到整个整数变成0为止。怎么判断⼀个整数的最右边是不是1?我们知道,整数 1 除了最右边⼀位之外所有位都是0。 因此,如果⼀个整数与1做与运算的结果是1,则表示该整数最右边⼀位是1,否则是0。Pythonclass Solution(object): def hammingWeight(self, n):

2020-06-18 00:35:00 542 1

原创 【面试题】旋转数组的最小数字(二分查找法 + 详细题解思路分析)

题目描述这道题最直观的解法并不难,从头到尾遍历数组一次,就能找到最小的元素,时间复杂度为 O(n)。但是这个思路没有利用到输⼊的旋转数组的特性,在有序数组中用二分查找法可以实现 O(logn) 的查找。我们注意到,旋转之后的数组实际上可以分为两个有序的子数组,而且前面的子数组的元素都大于等于后面子数组中的元素,此外,我们还注意到这个最小的元素正好是两个子数组的分界线。因为,我们可以尝试用二分查找的思路来寻找这个分界点。同二分查找算法的思路,定义两个指针 index1 和 index 2,初始分别指向

2020-06-13 00:05:25 251

原创 【面试题】用栈实现队列,用队列实现栈 (详细图解+Java、Python多种解法实现)

用两个栈实现队列Pythonclass CQueue(object): def __init__(self): # 定义两个栈 self.stack1 = [] self.stack2 = [] def appendTail(self, value): """ :type value: int :rtype: None """ # 插入一个元素时,直接压入

2020-06-12 17:10:59 313

原创 【面试题】重建二叉树(解题思路分析+Java、Python实现+代码详细注释)

题目描述解题思路在⼆叉树的前序遍历序列中, 第⼀个数字即为树的根结点 root的值。扫描中序遍历序列,找到根节点 root在中序遍历中的位置,从而将中序遍历序列划分为 [ 左子树 | 根节点 | 右子树 ]。 为了提升搜索效率,使用哈希表 预存储中序遍历的值与索引的映射关系,将每次查找的时间复杂度降为 O(1)。根据中序遍历中的左(右)子树的节点数量,可将前序遍历划分为 [ 根节点 | 左子树 | 右子树 ] 。这样一来,我们已经分别找到了左、 右子树的前序遍历序列和中序遍历序列, 我们可以

2020-06-11 17:57:18 957

原创 【面试题】从尾到头打印链表(Java、Python实现)

题目描述解法一:递归法先遍历至链表末端,回溯时依次将节点值加入列表 ,这样就可以实现链表值的倒序输出。时间复杂度 O(n): 遍历整个链表,需要递归 n 次。空间复杂度 O(n): 系统递归调用需要 O(n) 的栈空间。Python# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.nex

2020-06-11 15:33:06 205

原创 【面试题】替换空格(多种解法、Java、Python实现)

题目描述在 Python 和 Java 等语言中,字符串都被设计成不可变的类型,即无法直接在原来的字符串上做替换,需要新建一个空字符串实现。时间复杂度 O(n): 遍历字符数组需要 O(n),每轮添加(修改)字符操作需要 O(1) ;空间复杂度 O(n) : Python 新建的 list 和 Java 新建的 StringBuilder 都使用了线性大小的额外空间。Pythonclass Solution(object): def replaceSpace(self, s):

2020-06-10 18:49:30 812

原创 【面试题】二维数组中的查找(Java、Python实现)

题目描述解法一:暴力法时间复杂度:O(n*m),二维数组中的每个元素都被遍历一次,因此时间复杂度为二维数组的大小。空间复杂度:O(1)Pythonclass Solution(object): def findNumberIn2DArray(self, matrix, target): """ :type matrix: List[List[int]] :type target: int :rtype: bool

2020-06-10 17:17:51 252

原创 【面试题】数组中重复的数字

题目描述解法一:哈希表判重法遍历整个数组,判断每个数字是否存在于哈希表中,如果存在则直接返回,否则将其加入进去。时间复杂度:O(n)空间复杂度:O(n)Pythonclass Solution(object): def findRepeatNumber(self, nums): """ :type nums: List[int] :rtype: int """ s = set() for i

2020-06-10 15:22:17 142

原创 【数据结构基础】设计合理数据结构的方法论

数据处理的基本操作其实,代码对数据的处理无非就是对输入数据进行计算,得到结果并输出的过程。而数据处理的操作过程就是找到需要处理的数据,计算结果,再把结果保存下来。这个过程可以总结为以下三个基本操作:找到要处理的数据。这就是按照某些条件进行查找。把结果存到一个新的内存空间中。这就是在现有数据上进行新增。把结果存到一个已使用的内存空间中。这需要先删除内存空间中的已有数据,再新增新的数据。即便是很复杂的代码,经过拆解,它对数据的处理也只有这 3 个基本操作,分别是增、删、查。只要围绕这 3 个数据处

2020-06-04 18:44:06 524

原创 【数据结构基础】程序运行效率优化的核心方法论

复杂度是什么?计算机通过一个个程序去执行计算任务,也就是对输入数据进行加工处理,并最终得到结果的过程。每个程序都是由代码构成的。可见,编写代码的核心就是要完成计算。但对于同一个计算任务,不同计算方法得到结果的过程复杂程度是不一样的,这对实际的任务处理效率就有了非常大的影响。复杂度是衡量代码运行效率的重要的度量因素。在实际衡量时,我们通常会围绕以下2 个维度进行。首先,这段代码消耗的资源是什么。一般而言,代码执行过程中会消耗计算时间和计算空间,那需要衡量的就是时间复杂度和空间复杂度。其次,这段代码对

2020-06-04 16:50:54 392

MATLAB图像处理实例详解(高清PDF)

本书全面、系统地介绍了MATLAB在数字图像处理中的各种技术应用。本书对图像处理的基础概念做了必要的交代,重点给出了MATLAB在图像处理各个环节中的实现方法,在讲解各个知识点时列举了丰富的实例。 本书共分为15章,分为3大部分。 第一部分:MATLAB基础、图像基础、MATLAB数字图像处理基础 第二部分:基于MATLAB的常见图像处理技术(图像运算、图像增强、图像复原、图像分割、图像变换、彩色图像处理) 第三部分:基于MATLAB的高级图像处理技术及应用(图像压缩编码、图像特征分析、图像形态学处理、小波在图像处理中的应用、基于simulink的视频和图像处理和MATLAB图像处理综合实例)。

2018-08-14

C++ Primer 第五版 课后习题答案(高清无水印PDF)

C++ Primer 第五版(中文版) 第1~11章课后习题答案(附上代码)

2018-08-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除