- 浏览: 99071 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
dreamoftch:
...
对hibernate的理解 -
quanwsx:
对hibernate的理解 -
zxt1985:
太坑爹了……啥都没
**java网络编程 -
Java_zhou:
坑爹啊。。。
**java网络编程 -
juda:
this code can not work rightly ...
Reverse String
传说中微软的几道算法题,练习一下吧:
1.设计一个算法,找出二叉树上任意两个结点的最近共同父结点。
复杂度如果是O(n2)则不得分。
/* * 获得两个节点共同的父节点 */ public ArrayList<BiTreeNode> getCommonParents(BiTreeNode node1, BiTreeNode node2, BiTreeNode root) { ArrayList<BiTreeNode> commonList = new ArrayList<BiTreeNode>(); ArrayList<BiTreeNode> node1ParentList = new ArrayList<BiTreeNode>(); ArrayList<BiTreeNode> node2ParentList = new ArrayList<BiTreeNode>(); node1ParentList = getParents(node1, root); node2ParentList = getParents(node2, root); int len1 = node1ParentList.size(); int len2 = node2ParentList.size(); for (int i = 0; (i < len1) && (i < len2); i++) { char data1 = node1ParentList.get(i).getData(); char data2 = node2ParentList.get(i).getData(); if (data1 == data2) { commonList.add(node1ParentList.get(i)); } } return commonList; } /* * 获得一个节点的所有父节点 */ ArrayList<BiTreeNode> getParents(BiTreeNode node, BiTreeNode root) { int top = 0; ArrayList<BiTreeNode> stack = new ArrayList<BiTreeNode>(); BiTreeNode pointer = root; while (top > 0 || pointer != null) { if (pointer != null) { if (pointer.getData() == node.getData()) { return stack; } stack.add(pointer); top++; pointer = pointer.getLeftChild(); } else { BiTreeNode topNode = stack.get(top - 1); while(topNode.getVisit() == 1) { stack.remove(--top); topNode = stack.get(top - 1); } topNode.setVisit(1); pointer = topNode.getRightChild(); } } return stack; }
2.一棵排序二叉树,令 f=(最大值+最小值)/2,设计一个算法,找出距离f值最近、大于f值的结点。
复杂度如果是O(n2)则不得分。
package org.jyjiao; import java.util.*; //创建一棵二叉树 //判定是否是一棵二叉排序树 //插入一个节点 //一棵排序二叉树,令 f=(最大值+最小值)/2,设计一个算法,找出距离f值最近、大于f值的结点。复杂度如果是O(n2)则不得分。 /*已知有一棵二叉排序树,其中保存了 n 个互不相同的元素,且左子树中的元素小于根小于右子树中的元素。现在给你这棵二叉排序树的前序遍历序列,请你给出一个算法能够把这棵二叉排序树重新构造起来。具体实现不拘,用伪码说明也可以,但是要求: 1、说明你的算法的正确性。 2、分析你的算法的时间复杂度。 */ class TreeNode{ int data; TreeNode leftChild,rightChild; public int getData(){ return this.data; } public void setData(int data){ this.data=data; } public TreeNode getLeftChild(){ return this.leftChild; } public TreeNode getRightChild(){ return this.rightChild; } public void setLeftChild(TreeNode leftChild){ this.leftChild=leftChild; } public void setRightChild(TreeNode rightChild){ this.rightChild=rightChild; } public TreeNode(int data){ this.data=data; this.leftChild=null; this.rightChild=null; } } public class OrderBiTree{ TreeNode root; ArrayList<TreeNode> nodeArray=new ArrayList<TreeNode>(); public OrderBiTree(){ root=null; } public TreeNode createOrderTree(int[] array){ for(int i=0;i<array.length;i++){ TreeNode newNode=new TreeNode(array[i]); insert(newNode); } return root; } public void insert(TreeNode node){ if(root==null){ root=node; } else{ TreeNode pNode=root; while(true){ if(node.getData()<=pNode.getData()){ if(pNode.getLeftChild()==null){ pNode.setLeftChild(node); return; }else{ pNode=pNode.getLeftChild(); } } else{ if(pNode.getRightChild()==null){ pNode.setRightChild(node); return; }else{ pNode=pNode.getRightChild(); } } }//while }//else } public TreeNode findNode(TreeNode root){ if(root==null){ return null; } int middle=(nodeArray.get(0).getData()+nodeArray.get(nodeArray.size()-1).getData())/2; TreeNode pointer=root; ArrayList<TreeNode> bigList=new ArrayList<TreeNode>(); while(true){ if(middle<=pointer.getData()){ bigList.add(pointer); if(pointer.getLeftChild()==null){ break; } pointer=pointer.getLeftChild(); } if(middle>pointer.getData()){ if(pointer.getRightChild()==null){ break; } pointer=pointer.getRightChild(); } } return bigList.get(bigList.size()-1); } public void middleTravel(TreeNode root){ if(root==null){ return; } middleTravel(root.getLeftChild()); System.out.print(root.getData()+" "); nodeArray.add(root); middleTravel(root.getRightChild()); } public static void main(String[] args){ int[] array={10,9,3,15,20,5,30}; OrderBiTree tree=new OrderBiTree(); TreeNode orderTree=tree.createOrderTree(array); tree.middleTravel(orderTree); TreeNode bigNode=tree.findNode(orderTree); System.out.println("\nbigNode.getData()="+bigNode.getData()); } }
3.一个整数数列,元素取值可能是1~N(N是一个较大的正整数)中的任意一个数,相同数值不会重复出现。设计一个算法,找出数列中符合条件的数对的个数,满足数对中两数的和等于N+1。
复杂度最好是O(n),如果是O(n2)则不得分。
发表评论
-
0928--算法题
2010-09-28 11:14 1520算法设计:n个连续自然数,乱序存放于一个数组中,缺失一个,缺失 ... -
Reverse String
2010-09-19 16:46 933package org.jyjiao; public c ... -
0906--拼接出最小整数
2010-09-06 10:38 1162题目描述:设有n个正整数,将它们联接成一排,组成一个最小的多位 ... -
0830--算法练习题
2010-08-28 17:42 9081. 内存中有一个长数组,条目数为10万,数组单元为结构体st ... -
??0829-Joseph问题
2010-08-28 16:39 828N个人排成一圈,指定第一个人,去除他,然后跳着一人去除第3人, ... -
???0828--存储空间管理器+n选m问题
2010-08-28 16:36 1006用单链表实现一个存储空间管理器,包括分配和释放空间。要求释放 ... -
# 0827--算法练习题
2010-08-25 14:12 7881. 一个文本文件有多行 ... -
!!!0826--图
2010-08-25 14:11 626baidu1 -
###0825-1 最短路径+最小支撑树+路径压缩+等价类问题+拓扑排序
2010-08-25 13:28 804dijkska算法实现 floyed算法实现 ... -
# 0823--树进阶
2010-08-25 13:27 7121. 判断一棵二叉树是否平衡 2. 构造AVL ... -
#0822 系分
2010-08-23 14:18 645http://www.blogjava.net/ITdavid ... -
0821集合问题
2010-08-23 14:16 766{ aaa, bbb, ccc},{bbb, ddd }, { ... -
0819- 找共同url
2010-08-18 17:47 795给你a、b两个文件,各存放50亿条url,每条url各占用64 ... -
0819--找队友
2010-08-18 11:52 1020全体员工玩分组游戏,前面五分钟大家分头找队友,并将每个人找到的 ... -
0817--概率问题
2010-08-16 18:53 716输入:N(整数)输入:数据文件A.txt,不超过6条记录,字符 ... -
0816--支配数
2010-08-16 18:52 747支配数:数组中某个元素出现的次数大于数组总数的一半时就成为支配 ... -
0815-二叉树
2010-08-14 11:10 930第一题: 在一棵一般的二叉树中找到指定的元素,如果有重 ... -
0811-3 对webservice执行自动化测试
2010-08-11 20:05 9200811-3 对webservice执行自动化测试 i ... -
0812-字典树算法
2010-08-11 19:59 15121. 在用户输入英文单词时,经常发生错误,我们需要对其进行纠错 ... -
0811-2 求最小前缀
2010-08-11 19:34 913给以文件,文件中每一行是一个单词,求出每个单词的最小前缀,使得 ...
相关推荐
Mirosoft Chart Control 工具打包集合。 都是从Mirosoft网站下载的资源 包括 chartcontrol安装程序 chartcontrol addon安装程序 chartcontrol 语言包安装程序 chartcontrol 的b/s和c/s的官方实例代码 环境要求为...
Apress.Beginning.Kinect.Programming.with.the.Microsoft.Kinect.SDK.Mar.2012. 很棒的一本教大家開始Kinect windows編程的書~ 全英文版
不想去下文件可以抄作业
本人试过能用。
这是老版的汇编连接程序,因为老才珍贵吗,给大家看看用用
语言:English ...有关此扩展程序支持的域的列表,请访问https://github.com/bjornstar/intercept-redirect对于Mozilla Firefox用户-https://intercept-redirect.firefox.bjornstar.com对于Mirosoft Edge用户- ...
微软Edge浏览器怎样清除浏览历史记录?.docx
VC++2010组件包,有些应用的安装使用需要该版本的工具包
5.1.1 PowerPoint 2003工作界面 在任务栏上选择 【开始】| 【程序】 |【Mirosoft Office】 |【Microsoft Office PowerPoint 2003】 命令启动PowerPoint 2003软件,展现出一 个全新的软件工作界 面。 PowerPoint-...
Microsoft Communications Control控件,包括(mscomm32.ocx,mscomm32.dep,mscomm.bat,mscomm.reg,mscomm.srg)。 解压后,使用方法如下: 1.解压缩压缩包内包含五个文件: MSCOMM.SRG MSCOMM32.DEP ...
how we test software at microsoft, 英文版
这是一个中文的php连接SQL server的手册。
微软公司开发的移动应用架构平台。使用该架构,不仅能够在智能手机等高级移动终端上使用Web服务,而且全世界数百万Visual Studio NET开发人员能够轻松地在Pocket PC OS上开发移动应用程序。
Microsoft.Office.Core.dll 下载. Microsoft.Office.Interop.Excel.Workbooks 可以用来导出文档相关的内容, Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks; Microsoft.Office.Interop....
Liveries Mega Pack Manager 飞行模拟器2020的易于使用的涂装管理器。用法加入官方Liveries Mega Pack Discord服务器: ://discord.gg/megapack 下载最新的管理器版本: : 按照说明完成设置。安装配件前往“可用的...
本人倾心打造esql编程pdf格式完美文档。涵盖了C语言结合各种数据库进行嵌入式开发实例。数据库包括:DB2、Informix、Sysbase、mirosoft SqlServer。
speaker,mirosoft,阅读~分诊~叫号~
订单管理系统 先决条件: Microsoft SQL Server 2012 Express Edition或更高版本,并... 报告Mirosoft RDLC + Syncfusion Report Viewer 订单搜索Reactive Extensions for .NET 部署- Click Once on Microsoft Azure