![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
有点野的程序猿
AI的搬运工,大佬的倾听者,理论与实践结合,想法与行动交叉,理性与感性并存,工作与生活互补。
展开
-
String,StringBuffer和StringBilder总结
关于String,StringBuffer和StringBilder的总结三者的主要区别:一、String1、String是不可变字符串,当一个String对象被修改时,堆内存中需要创建新的内存来存储新的值,无用的对象会被垃圾回收器回收。如果String对象总是被修改,会极大的浪费内存空间。2、String在三者中的效率最低。3、当创建String对象时,可以利用构造方法String str1 = new String(“hello”);的方式进行初始化;也可以使用赋值的方法进行初始化,Strin原创 2020-11-02 11:56:15 · 183 阅读 · 1 评论 -
连续子数组最大和
连续子树组最大和输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。示例输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6分析连续子树组并一定从第一个元素开始。可以分别计算截止到第i号元素之前数组的最大和,例如示例中,分别计算-2,1,-3…-5,4之前各个数组的和,然后再比较最大值即可。Java代码实现import java.util.Math;public int原创 2020-10-23 16:03:39 · 151 阅读 · 0 评论 -
栈的压入、弹出序列
栈的压入、弹出序列输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)Java代码实现public boolean isPopOrder(int[] pushA, int[] popA){ if(pushA.length == 0 || popA.len原创 2020-10-23 15:27:44 · 60 阅读 · 0 评论 -
合并两个排序的链表
合并两个排序的链表输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。原创 2020-10-20 23:49:33 · 77 阅读 · 0 评论 -
平衡二叉树
平衡二叉树输入一棵二叉树的根节点,判断该二叉树是否是平衡二叉树。平衡二叉树定义平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法)性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。分析此题就是在求二叉树的最大深度的基础上再做一些深一步的变化。可以自底向上考虑,即后序遍历+剪枝二叉树类定义public class TreeNode{ public int val; public TreeNode le原创 2020-10-17 22:54:21 · 73 阅读 · 0 评论 -
反转链表
反转链表输入一个链表,反转链表后,输出新链表的表头。分析双指针法。就是定义两个指针,pre用于指向当前节点的前一个节点,next用于指向当前节点的后一个节点,具体的流程可以查看leetcode上的解析,很详细。虽然过程有些复杂,但是代码很简单,只要理解了逻辑,代码很容易实现。Java代码实现链表节点类的简单实现public class ListNode{ public int val; public ListNode next = null; public ListNode(int val原创 2020-10-17 22:19:52 · 45 阅读 · 0 评论 -
数值的整数次方
数值的整数次方给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0分析首先要注意的是int类型的数的取值范围是负的 2的31次方到2的31次方减一!!!所以在代码实现的过程中就要考虑到负数次方。其次要注意的就是double类型的浮点数,这些就是变成的细节问题了。代码实现public double Power(double base, int exponent){ if(base = 0.0){原创 2020-10-16 16:02:07 · 50 阅读 · 0 评论 -
二进制中1的个数
二进制中1的个数输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。分析如果一个数不为0,那么至少它有一位为1;如果把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1。减去1后,第三位变成0,它后面的两位0变成了1,而前面的1保持不变,因此得到的结果是1011。减1的结果是把最右边的一个1开始的所有位都取反了。这个时原创 2020-10-13 23:26:09 · 78 阅读 · 0 评论 -
斐波那契数列
斐波那契数列大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1),n<=39 。分析斐波那契数列公式:F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2),(n>=3,n∈N*);递归法递归是最简单的实现方式,但是递归的缺点是不考虑时间复杂度和内存问题。代码public int Fibonacci1(int n){ if(n <= 1){ return n; } return Fibonacc原创 2020-10-04 09:31:26 · 370 阅读 · 0 评论 -
重建二叉树
重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。分析1、前中后序遍历的原理一定要搞懂!!!所有的遍历都是以“根”节点为参照的。下面我将左孩子节点称为“左”,右孩子节点称为“右”,根节点称为“中”。前序遍历就是根节点在前边,中序遍历就是根节点在中间,后序遍历就是根节点在后边!个人感觉这样记的特别准。前序遍原创 2020-10-03 16:13:37 · 52 阅读 · 0 评论 -
构建乘积数组
构建乘积数组给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];)对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在。例如:输入{1,2,3,4,5}输出{120,60,40,30,24}...原创 2020-10-03 10:48:14 · 88 阅读 · 0 评论 -
二叉树镜像-Java
操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树8/ 6 10/ \ / 5 7 9 11镜像二叉树8/ 10 6/ \ / 11 9 7 5分析原创 2020-09-17 10:10:27 · 93 阅读 · 0 评论 -
Java实现不用加减乘除做加法
Java实现不用加减乘除做加法写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。分析首先可以看一下下面这张表看得出来,无进位和与异或运算是相同的,进位和与运算是相同的,但是需要左移一位。这样两个数字的二进制之和s=a+b就变成了:1.无进位和:n=a^b,异或运算;2.进位:c=a&b<<1,与运算后再左移一位;和s=(无进位和)n+(进位)c即s=a+b转化成了s=n+c,然后循环n和c,直到c=0,此时s=n,return n;(这其中原创 2020-09-29 20:01:27 · 442 阅读 · 0 评论 -
二叉树的深度
二叉树的深度输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。简单二叉树类public class TreeNode{ public int val = 0; public TreeNode left = null; public TreeNode right = right; public TreeNode(int val){ this.val = val; }}方法一:递归法(分治法)求一个规模为n的问题,原创 2020-09-29 21:58:56 · 109 阅读 · 0 评论