
剑指offer
zmy19
这个作者很懒,什么都没留下…
展开
-
剑指offer.JZ48连续子数组的最大和
HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1)code:public class Solution {原创 2020-06-29 21:29:58 · 278 阅读 · 0 评论 -
剑指offer.JZ47求1+2+3+...+n
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。解题思路:短路code:public class Solution { public int Sum_Solution(int n) { int result = n; boolean value = (n>0) && ((result += Sum_Solution(n-1)) == 0);原创 2020-06-29 20:46:26 · 1840 阅读 · 0 评论 -
剑指offer.JZ5用两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解决思路: 当stack2不为空时,在stack2中的栈顶元素是最先进入队列的元素,可以弹出; 当stack2为空时,先将stack1中的元素逐个弹出并压入stack2,再弹出栈顶元素。code:import java.util.Stack;public class Solution { Stack<Integer> stack1 = new Stack<Integer>();原创 2020-06-27 14:17:59 · 148 阅读 · 0 评论 -
JZ9.变态跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。code:public class Solution { public int JumpFloorII(int target) { if (target <= 0) return -1; if (target == 1) return 1; else{原创 2020-06-27 14:09:49 · 240 阅读 · 1 评论 -
剑指offer.JZ18二叉树的镜像
操作给定的二叉树,将其变换为源二叉树的镜像。二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5code:/**public class TreeNode { int val = 0; TreeNode left =原创 2020-06-27 13:47:12 · 150 阅读 · 0 评论 -
剑指offer.JZ38二叉树的深度
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。思路:DFScode:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: int Tre原创 2020-06-27 13:37:14 · 172 阅读 · 0 评论 -
JZ51构建乘积数组
题目描述:给定一个数组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];)code:package offer;class Solution {public: vector<int> m原创 2020-06-25 21:30:00 · 122 阅读 · 0 评论 -
剑指offer.JZ48不用加减乘除做加法
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号`在这里插入代码片`。 思路:位运算 1.两个数相异或:相当于没一位相加(不考虑进位); 2.两个数相与并左移1位:相当于求得进位; 3.将上述两个步骤相加。代码:package offer;public class JZ48 { public static int add(int num1,int num2) { int a,b; //进位为零,跳出循环 while(num1 !=原创 2020-06-25 17:05:12 · 156 阅读 · 0 评论