JZ61扑克牌顺子描述现在有2副扑克牌,从扑克牌中随机五张扑克牌,我们需要来判断一下是不是顺子。有如下规则:1.A为1,J为11,Q为12,K为13,A不能视为142.大、小王为0,0可以看作任意牌3.如果给出的五张牌能组成顺子(即这五张牌是连续的)就输出true,否则就输出false。4.数据保证每组5个数字,每组最多含有4个零,数组的数取值为[0,13]具体做法:将nums数组依次装入set集合,遇到0则返回装下一个元素,出现重复元素则返回false,并在其中记录max,min,最终max-min>=5的都不是顺子;代码packageesay.JZ61扑克牌顺子;importjava.ut
买卖股票的最好时机(一)描述假设你有一个数组prices,长度为n,其中prices[i]是股票在第i天的价格,请根据这个价格数组,返回买卖股票能获得的最大收益1.你可以买入一次股票和卖出一次股票,并非每天都可以买入或卖出一次,总共只能买入和卖出一次,且买入必须在卖出的前面的某一天2.如果不能获取到任何利润,请返回03.假设买入卖出均无手续费解法一:暴力(常规大循环解决)思路步骤:最显而易见的解法,当然可能并不是最优的解法声明变量ans=0存放最终答案两层for循环,分别找到数组中最大的差值,表示利润最大化比较并更新ans的值返回ans即为答案代码intans=0;for(inti=0;ian
买卖股票的最好时机(一)描述假设你有一个数组prices,长度为n,其中prices[i]是股票在第i天的价格,请根据这个价格数组,返回买卖股票能获得的最大收益1.你可以买入一次股票和卖出一次股票,并非每天都可以买入或卖出一次,总共只能买入和卖出一次,且买入必须在卖出的前面的某一天2.如果不能获取到任何利润,请返回03.假设买入卖出均无手续费解法一:暴力(常规大循环解决)思路步骤:最显而易见的解法,当然可能并不是最优的解法声明变量ans=0存放最终答案两层for循环,分别找到数组中最大的差值,表示利润最大化比较并更新ans的值返回ans即为答案代码intans=0;for(inti=0;ian
JZ65不用加减乘除做加法描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。数据范围:两个数都满足-10\len\le1000−10≤n≤1000进阶:空间复杂度O(1)O(1),时间复杂度O(1)O(1)方法一:位运算非递归(推荐使用)思路:由于题目禁止我们使用+,-,*,/运算符,我们需要通过位运算来实现加法。我们需要通过循环迭代两个变量实现,一个变量指代进位,一个变量指代非进位。位运算中两数进行异或运算可以提供两数加和后二进制非进位信息,位运算中的两数进行与运算的结果可以提供两数加和后的二进制进位信息。因此我们将两数与运算的结果进行循环左移一位,并在下一轮
JZ65不用加减乘除做加法描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。数据范围:两个数都满足-10\len\le1000−10≤n≤1000进阶:空间复杂度O(1)O(1),时间复杂度O(1)O(1)方法一:位运算非递归(推荐使用)思路:由于题目禁止我们使用+,-,*,/运算符,我们需要通过位运算来实现加法。我们需要通过循环迭代两个变量实现,一个变量指代进位,一个变量指代非进位。位运算中两数进行异或运算可以提供两数加和后二进制非进位信息,位运算中的两数进行与运算的结果可以提供两数加和后的二进制进位信息。因此我们将两数与运算的结果进行循环左移一位,并在下一轮
JZ66构建乘积数组描述给定一个数组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](除A[i]以外的全部元素的的乘积)。程序中不能使用除法。(注意:规定B[0]=A[1]*A[2]*...*A[n-1],B[n-1]=A[0]*A[1]*...*A[n-2])对于A长度为1的情况,B无意义,故而无法构建,用例中不包括这种情况。方法1思路矩阵中由对角线1将其分成了上三角和下三角。我们先看下三角,如果我们累乘的时候,B[1]是在B[0]的基础上乘了新增的一个A[0],B[2
JZ66构建乘积数组描述给定一个数组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](除A[i]以外的全部元素的的乘积)。程序中不能使用除法。(注意:规定B[0]=A[1]*A[2]*...*A[n-1],B[n-1]=A[0]*A[1]*...*A[n-2])对于A长度为1的情况,B无意义,故而无法构建,用例中不包括这种情况。方法1思路矩阵中由对角线1将其分成了上三角和下三角。我们先看下三角,如果我们累乘的时候,B[1]是在B[0]的基础上乘了新增的一个A[0],B[2
JZ68二叉搜索树的最近公共祖先描述给定一个二叉搜索树,找到该树中两个指定节点的最近公共祖先。1.对于该题的最近的公共祖先定义:对于有根树T的两个节点p、q,最近公共祖先LCA(T,p,q)表示一个节点x,满足x是p和q的祖先且x的深度尽可能大。在这里,一个节点也可以是它自己的祖先.2.二叉搜索树是若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值;若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值3.所有节点的值都是唯一的。4.p、q为不同节点且均存在于给定的二叉搜索树中。数据范围:3思路:非递归,利用二叉搜索树的特点。左子树若p,q都比当前结点的值小,说明最近公共祖先结
JZ68二叉搜索树的最近公共祖先描述给定一个二叉搜索树,找到该树中两个指定节点的最近公共祖先。1.对于该题的最近的公共祖先定义:对于有根树T的两个节点p、q,最近公共祖先LCA(T,p,q)表示一个节点x,满足x是p和q的祖先且x的深度尽可能大。在这里,一个节点也可以是它自己的祖先.2.二叉搜索树是若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值;若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值3.所有节点的值都是唯一的。4.p、q为不同节点且均存在于给定的二叉搜索树中。数据范围:3思路:非递归,利用二叉搜索树的特点。左子树若p,q都比当前结点的值小,说明最近公共祖先结
JZ69跳台阶描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。数据范围:1\leqn\leq401≤n≤40要求:时间复杂度:O(n)O(n),空间复杂度:O(1)O(1)方法1递归思路题目分析,假设f[i]表示在第i个台阶上可能的方法数。逆向思维。如果我从第n个台阶进行下台阶,下一步有2中可能,一种走到第n-1个台阶,一种是走到第n-2个台阶。所以f[n]=f[n-1]+f[n-2],那么初始条件了,f[0]=f[1]=1。所以就变成了:f[n]=f[n-1]+f[n-2],初始值f[0]=1,f[1]=1代码if(t