![](https://img-blog.csdnimg.cn/20190918140145169.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
剑指offer Java
剑指offer java
MallowYi
这个作者很懒,什么都没留下…
展开
-
剑指offer 二进制中1的个数 Java
题目 输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。题解 val :1101000, val-1: 1100111 那么val & (val-1) : 1100000 一次操作就代表找到了一个1并且将它化为0 接着继续循环判断,直到该数变为0;public class Solution { public int NumberOf1(int n) { int ans = 0; while(n != 0){原创 2020-08-12 20:54:48 · 115 阅读 · 0 评论 -
剑指offer 矩形覆盖 Java
题目 我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?比如n=3时,2*3的矩形块有3种覆盖方法:题解 典型的跳台阶问题public class Solution { public int RectCover(int target) { int[] a = new int[target+10]; a[1] = 1; a[2] = 2; a[3] =原创 2020-08-07 23:23:30 · 177 阅读 · 0 评论 -
剑指offer 平衡二叉树 Java
题目 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树题解 直接递归即可public class Solution { boolean isBalanced = true; public boolean IsBalanced_Solution(TreeNode root) { depth(root); return isBalanced; } public int dept原创 2020-08-04 23:28:43 · 176 阅读 · 0 评论 -
剑指offer 连续子数组的最大和(入门dp) Java
题目 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1)题解 首先我们Dp[i]数组中存放的是以第i个数为结尾时,原创 2020-07-25 00:06:53 · 174 阅读 · 0 评论 -
剑指offer 求1+2+3+...+n Java
题目 求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。题解 不能用循环的话使用递归代替,但是递归需要判断出口,题目说明不能使用if,此时使用&&来判断出口。A&&B时,若A为假,则B不执行,所以按照这个思想来进行判断出口。public class Solution { public int Sum_Solution(int n) { boolean x原创 2020-07-21 23:11:51 · 147 阅读 · 0 评论 -
剑指offer 数组中重复的数 Java
题目 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。题解直接对数组进行排序,之后判断相邻的两个数是否重复import java.util.*;public class Solution { public boolean duplicate(int numbers[],原创 2020-07-18 00:05:09 · 125 阅读 · 0 评论 -
剑指offer 数据流中的中位数 Java
题目题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。题解 我们可以设置一个大顶堆和一个小顶堆,在每次获取到数据时根据数据是第几个来确定奇偶,从而将每次插入的数分开放入两个堆中,在每次放入完成后,将所在堆的堆顶放入另外一个堆中,从而确保数量的平均以及大小顺序按原创 2020-07-16 23:43:06 · 127 阅读 · 0 评论 -
剑指offer 剪绳子(动态规划) Java
题目题目描述 给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],…,k[m]。请问k[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。输入描述:输入一个数n,意义见题面。(2 <= n <= 60)输出描述:输出答案。示例1输入8输出18题解暴力递归法(时间复杂度太高容易超时)public原创 2020-07-15 00:01:24 · 226 阅读 · 0 评论 -
剑指offer 用两个栈实现队列 Java
题目题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。题解首先想到栈是FILO,队列是FIFO,那么就很容易想到队列出队POP操作的实现方法为: 1.我们进行入队操作时,直接将元素Push进stack1中; 2.此时stack1中的元素都是倒着排放的,第一个进入的元素在栈底,而我们想要获取的元素正是栈底的元素,所以我们将stack1中的元素全部转移至stack2中,此时stack2栈顶的元素就是我们所需要的队列队尾的元素,此时直接stack2.po原创 2020-07-12 23:08:58 · 261 阅读 · 0 评论 -
剑指offer 变态跳台阶 (经典跳台阶问题)Java
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。题解设f[i] 表示 当前跳道第 i 个台阶的方法数。那么f[n]就是所求答案。假设现在已经跳到了第 n 个台阶,那么前一步可以从哪些台阶到达呢?如果上一步跳 1 步到达第 n 个台阶,说明上一步在第 n-1 个台阶。已知跳到第n-1个台阶的方法数为f[n-1]如果上一步跳 2 步到达第 n 个台阶,说明上一步在第 n-2 个台阶。已知跳到第n-2个台阶的方法数为f[n-2]原创 2020-07-11 23:28:26 · 225 阅读 · 0 评论 -
剑指offer 二叉树的镜像 Java
首先我们看题目的要求,我们需要对树进行遍历,在遍历的途中将左右子节点的指针对调,由此联想到后序遍历,因为后序遍历是从叶子节点开始的,而我们需要的也是从叶子节点开始。递归/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/pub原创 2020-07-11 00:16:24 · 153 阅读 · 0 评论 -
剑指offer 二叉树的深度 Java
递归写法/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { public int TreeDepth(TreeNode root) { if(root ==原创 2020-07-09 17:49:34 · 156 阅读 · 0 评论 -
剑指offer 不用加减乘除做加法 Java
题目描述public class Solution { public int Add(int num1,int num2) { int jinwei; int shuzhi; do{ shuzhi = num1 ^ num2; jinwei = (num1 & num2) << 1; num1 = shuzhi; num2 = ji原创 2020-07-08 23:55:31 · 121 阅读 · 0 评论