
算法
MJ_911
欢迎打扰
展开
-
Java 实现输入某二叉树的前序遍历和中序遍历的结果,重建出该二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。eg:首先理解三种遍历方法区别,例如下图2.5所示:所以我们容易得知在前序遍历中第一个为根节点,即root。然后在中序遍历中查找root.value...原创 2019-03-25 15:51:01 · 541 阅读 · 0 评论 -
2019阿里巴巴Java开发实习生模拟编程题
问题描述小广附近有家盒马店,该店提供配送服务,配送范围是系统根据各项指标决策出的一个多边形,假设小广现在的位置为(x,y) , 请问小广是否在该盒马店的配送范围内,如果不在配送范围内请问他要最少要走多少距离才能到盒马店配送范围内。假设坐标点在二维平面 上,不考虑地球曲率等因素。输入 x.y(代表小广所在的位置,表示横坐标,y表示纵坐标) x1,y1.x2,y2.,x3,y3... xn...原创 2019-04-10 19:33:18 · 810 阅读 · 0 评论 -
Java 实现判断栈的压入、弹出序列是否匹配问题
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路:建立一个辅助栈,将第一个序列依次压入栈中,同时循环判断栈顶是否和第二个序列匹配...原创 2019-03-28 15:05:59 · 244 阅读 · 0 评论 -
Java 实现从上往下打印出二叉树的每个节点,同层节点从左至右打印。
思路:思路很明确,将节点和节点存储的值分别依次存入链表。public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer> intList = new ArrayList<Integer>(); ArrayList<TreeNode> t...原创 2019-03-28 17:24:31 · 902 阅读 · 0 评论 -
Java 实现判断是否是二叉搜索树的后序序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。题目很简单,明确了二叉搜索树的定义就很好做了:二叉搜索树定义:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值。首先判断序列是否为0或者为空,均返回false;接...原创 2019-03-29 10:05:41 · 415 阅读 · 0 评论 -
Java 实现遍历路径和等于某一值
题目描述输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)题目很简单,但是需要考虑怎么在前序遍历完一遍后将用于计算的备用值和数组清零?那么在遍历完该节点后,最后回退一下就可以了:ArrayList<ArrayList<Integ...原创 2019-03-29 11:13:40 · 238 阅读 · 0 评论 -
浅谈银行家算法
银行家算法目的:避免死锁的产生。算法思想:1、假分配检测:Request < NeedRequest < Available2、安全序列检测算法实例列举:某系统有R1,R2,R3共3中资源,在T0时刻P0,P1,P2,P3和P4这5个进程对资源的占用和需求情况如下表1,此时系统的可用资源向量为(3,3,2)。试问:1、T0时刻系统是否存在安全序列?2、P1请求资源:P...原创 2019-04-03 10:14:22 · 948 阅读 · 0 评论 -
Java 求解一个字符串,按字典序打印出该字符串中字符的所有排列
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。...原创 2019-04-21 21:20:19 · 2412 阅读 · 0 评论 -
Java 求解数组连续子向量的最大和
题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列...原创 2019-04-21 22:58:55 · 257 阅读 · 0 评论 -
Java 实现整数中1出现的次数
题目描述求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。思路:以百位数字为例:计算百位上1出现的次数,它要受到3方面的影响:百位上...原创 2019-04-24 21:49:44 · 411 阅读 · 0 评论 -
Java 实现顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。思路分析:当我们顺时针打印该矩阵时,每一圈的起始位置是左上角的元素,并且每一圈左上角元素都有一个共同点:它的行和列所...原创 2019-03-27 18:03:46 · 520 阅读 · 0 评论 -
Java 实现验证树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)原创 2019-03-26 14:44:52 · 304 阅读 · 0 评论 -
Java 实现二维数组中查找指定元素
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。首先拿到这个题目我的想法就是俩个for循环遍历,但是这样子时间复杂度过高经过思考我觉得可以考虑在数组中随机指定一个数字(i为该数字行下标,j为列下标)然后将该数字与目标进行比对,如果大于目标数字...原创 2019-03-25 16:02:19 · 2604 阅读 · 0 评论 -
Java 实现链表倒置
题目描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。网上还有其他方法,我这里使用的是改变链表本身数据结构,将链表元素的next倒置:/*** public class ListNode {* int val;* &...原创 2019-03-25 16:07:46 · 712 阅读 · 0 评论 -
Java 实现用两个栈来实现一个队列,完成队列的Push和Pop操作
题目描述我将队列中的元素定义为int类型。首先要解决这个问题我们就需要明白一个问题:什么是栈?什么是队列?栈是先进后出的,而队列是先进先出的:即输入顺序是1,2,3,4,5队列的pop是1栈的pop是5了解了这俩个的定义,接下来就简单就的多了:...原创 2019-03-25 16:37:34 · 1134 阅读 · 0 评论 -
Java 实现 求解斐波那契数列第n项
问题描述现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。最简单的方法就是刚开始接触递归的时候学习的:public int Fibonacci(int n) { if(n<=0) return 0; if(n==1) return 1; ...原创 2019-03-25 17:07:18 · 1748 阅读 · 0 评论 -
Java 实现青蛙跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。首先理解题目:把n级台阶时的跳法记为f(n),当n>2时,第一次跳的时候有两种不同的选择:一是第一次只跳1级,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,即为f(n-1);另外一种是第一次跳2级,此时跳法数目等于后面剩下的n-2级台阶的跳法数目,即为f(n...原创 2019-03-25 18:45:52 · 1451 阅读 · 0 评论 -
Java 实现复杂链表的复制
题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)这道题有三种解法,我在这里只是使用了时间复杂度和空间复杂度最低的方法:主要分为三步:复制出来的新节点紧接着插入对应的旧节点后面第二步再复制random指针最后一步就...原创 2019-03-29 14:46:05 · 142 阅读 · 0 评论 -
Java 实现二叉搜索树改变为双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。这道题思路很简单:首先搜索树是所有的左子树都小于根,右子树都大于根,所以只需要按中序遍历二叉树后修改每个节点的左右子节点即可:ArrayList<TreeNode> list = new ArrayList<TreeNode>(); publi...原创 2019-03-29 15:47:41 · 326 阅读 · 0 评论 -
Java 实现输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示
首先回顾一下原码反码补码的知识点:参考:https://blog.youkuaiyun.com/shenhaiwen/article/details/79001039假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为:(因为java中int 是4个字节,所以高位需要补0,占够32位)00000000 00000000 00000000 00000101原码:一个正数,按照绝对值...原创 2019-03-26 10:02:24 · 1291 阅读 · 0 评论 -
Java 实现合并排序俩个链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路:将俩个链表的值全部取出到数组中,利用Arrays.sort()库函数排序后重新赋值即可:...原创 2019-03-26 11:59:43 · 155 阅读 · 0 评论 -
Java 求解把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路很简单,将整型数组转为字符串数组后排好序然后连接起来就可以了,所以这个排序就是这道题的重点了。首先回顾一下Java字符串的compareTo()函数的作用:compareTo()就是比较两个值,如果前者大...原创 2019-04-24 22:31:19 · 241 阅读 · 0 评论