- 博客(24)
- 收藏
- 关注
原创 java 类的主动引用和被动引用
类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用、卸载。本文主要围绕类的初始化展开了解,其他的建议直接阅读《深入了解java虚拟机》或后续再做相关更新记录。类的主动引用是指类进行了初始化,类的被动引用是指类没有进行初始化。(题外:类的初始化是类加载过程的最后一步,除了在加载阶段用户应用程序可以通过自定义类加载器参与之外,其余动作完全由虚拟机主导和控制,只有到了初始化阶段,在java代码执行的角度来看,在真正开始执行代码逻辑。)下面我结合代
2021-09-25 17:50:33
679
1
原创 剑指offer.42-连续子数组的最大和
题目:输入n个整数,找出其中最小的k个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。这道题
2021-09-18 10:28:49
133
1
原创 剑指offer.39-数组中出现次数超过一半的数字
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如,输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。看...
2021-09-15 17:24:03
135
原创 剑指offer.32-从上到下打印二叉树
题目:从上到下打印二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如下图中的二叉树,则依次打印出[8,6,10,5,7,9,11]。二叉树节点的定义如下:public class BinaryTreeNode { int value; BinaryTreeNode leftNode; BinaryTreeNode rightNode; public BinaryTreeNode(int value) { this.value = value.
2021-09-10 15:26:01
132
原创 剑指offer.22-链表中倒数第k个节点
题目:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。链表节点定义如下:class ListNode { int value; ListNode next; public ListNode(int value) { this.value = value; t.
2021-09-08 18:08:09
362
原创 剑指offer.17-打印从1到最大的n位数
题目:输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1,2,3一直到最大的3位数999。
2021-09-08 11:47:46
157
原创 剑指offer.15-二进制中1的个数
题目:请实现一个函数,输入一个整数,输出该数的二进制表示中1的个数。例如,把9表示成二进制是1001,有2位是1。因此,如果输入9,则该函数输出2。解题思路:对于32位的int类型整数n,从右往左判断它的二进制数每位是1还是0。这种思路就只需要循环32次,就得到最终1的个数。那么现在的问题就变成了怎么判断n的二进制每位是1还是0?可以先使用整数1和n做与运算,如果结果是1,则说明n的二进制最低位是1,反之是0。然后把整数1左移一位变成2,再和n做与运算,判断n的次低位是不是1...这样循环32次.
2021-09-06 15:48:50
117
原创 剑指offer.14-剪绳子
题目:给你一根长度为n的绳子,请把绳子简称m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m]。请问k[0]xk[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。本题两种解法的时间和空间复杂度。 时间复杂度 空间复杂度 动态规划 O(n^2) O(n) 贪心算法 O(1) O(1) 动态规划.
2021-09-06 14:09:54
127
原创 剑指offer.12-矩阵中的路径
题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3x4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用下划线标出)。但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入这个格子。a b t gc ...
2021-09-04 15:00:06
147
原创 剑指offer.11-旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。这题最直接的解法就是把数组重头遍历,找到最小数字,这种解法的事件复杂度为O(n)。但其实这个题目最希望的是我们掌握一个思想:当题目涉及到有排序时,首先应该想到二分查找。旋转数组中包含两个递增排序的子数组。(特例:将数组的所有元素都或零个元素搬到它的末尾,等于自身,即只有一个递增.
2021-09-04 12:48:50
202
原创 剑指offer.10-斐波那契数列
题目一:求斐波那契数列的第n项。写一个函数,输入n,求斐波那契数列的第n项。斐波那契数列的定义如下:todo 1.怎么插入公式 2.状态矩阵相乘求法
2021-09-04 10:43:56
150
原创 剑指offer.9-用两个栈实现队列
面试题:用两个栈实现一个队列题目:用两个栈实现一个队列。队列的生命如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能。相关题:用两个队列实现一个栈...
2021-09-02 17:55:35
134
原创 剑指offer.8-二叉树的下一个节点
题目:给定一颗二叉树和其中的一个节点,如何找到中序遍历序列的下一个节点?树中的节点除了有两个分别指向左、右子节点的指针,还有一个指向父节点的指针。我们就以上图中的二叉树为例,它的中序遍历是{4, 2, 8, 5, 9, 1, 6, 3, 7}。分析某个节点的下一个节点位置我们可以得到三种情况。(设:输入节点为node,它的下一节点为nextNode)情况一:如果node有右子节点,那么nextNode就是node的右子节点的最左子节点。情况二:如果nod..
2021-09-02 14:01:28
124
原创 《剑指offer》刷题练习总目录
2021年8月31日 多云 直到今天,终于翻过了《剑指offer》最后一页,但也只是算草草地过了一遍罢了。在整本书的阅读过程中,有些题做了很多代码练习(尤其是前面的许多题),但有些题就是读懂了思想就跳过了,所以我打算在将来的一段时间里,持续发布文章来记录书中所有题目以及相关扩展题。阅读完第一遍后给我的最大收获是:在阅读题目思考解法的时候一定要全面考虑,题后一定要思考总结。本书中的题目都不难,重要的是解题过程——其中的每道题都会详细说明解题考虑点及各种解题方式间的权衡选择...
2021-09-02 00:28:53
148
原创 剑指offer.4-二维数组中的查找
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。你...
2021-09-02 00:03:05
119
原创 剑指offer.3-数组中重复的数字
在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如:如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。...
2021-09-01 18:08:08
134
原创 根据遍历数组构建二叉搜索树,以及二叉搜索树转双向链表(题36)
遍历数组构建二叉搜索树输入示例约定前序遍历和中序遍历构建后序遍历和中序遍历构建二叉搜索树转换成双向链表
2021-08-23 16:19:04
402
5
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人