- 浏览: 102984 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
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 1554算法设计:n个连续自然数,乱序存放于一个数组中,缺失一个,缺失 ... -
Reverse String
2010-09-19 16:46 1000package org.jyjiao; public c ... -
0906--拼接出最小整数
2010-09-06 10:38 1182题目描述:设有n个正整数,将它们联接成一排,组成一个最小的多位 ... -
0830--算法练习题
2010-08-28 17:42 9311. 内存中有一个长数组,条目数为10万,数组单元为结构体st ... -
??0829-Joseph问题
2010-08-28 16:39 873N个人排成一圈,指定第一个人,去除他,然后跳着一人去除第3人, ... -
???0828--存储空间管理器+n选m问题
2010-08-28 16:36 1032用单链表实现一个存储空间管理器,包括分配和释放空间。要求释放 ... -
# 0827--算法练习题
2010-08-25 14:12 8201. 一个文本文件有多行 ... -
!!!0826--图
2010-08-25 14:11 651baidu1 -
###0825-1 最短路径+最小支撑树+路径压缩+等价类问题+拓扑排序
2010-08-25 13:28 833dijkska算法实现 floyed算法实现 ... -
# 0823--树进阶
2010-08-25 13:27 7331. 判断一棵二叉树是否平衡 2. 构造AVL ... -
#0822 系分
2010-08-23 14:18 671http://www.blogjava.net/ITdavid ... -
0821集合问题
2010-08-23 14:16 786{ aaa, bbb, ccc},{bbb, ddd }, { ... -
0819- 找共同url
2010-08-18 17:47 830给你a、b两个文件,各存放50亿条url,每条url各占用64 ... -
0819--找队友
2010-08-18 11:52 1046全体员工玩分组游戏,前面五分钟大家分头找队友,并将每个人找到的 ... -
0817--概率问题
2010-08-16 18:53 738输入:N(整数)输入:数据文件A.txt,不超过6条记录,字符 ... -
0816--支配数
2010-08-16 18:52 771支配数:数组中某个元素出现的次数大于数组总数的一半时就成为支配 ... -
0815-二叉树
2010-08-14 11:10 967第一题: 在一棵一般的二叉树中找到指定的元素,如果有重 ... -
0811-3 对webservice执行自动化测试
2010-08-11 20:05 9510811-3 对webservice执行自动化测试 i ... -
0812-字典树算法
2010-08-11 19:59 19591. 在用户输入英文单词时,经常发生错误,我们需要对其进行纠错 ... -
0811-2 求最小前缀
2010-08-11 19:34 971给以文件,文件中每一行是一个单词,求出每个单词的最小前缀,使得 ...
相关推荐
Mirosoft Chart Control 工具打包集合。 都是从Mirosoft网站下载的资源 包括 chartcontrol安装程序 chartcontrol addon安装程序 chartcontrol 语言包安装程序 chartcontrol 的b/s和c/s的官方实例代码 环境要求为...
《Beginning Kinect Programming with the Microsoft Kinect SDK》是一本专门教授如何使用微软Kinect SDK进行Kinect Windows编程的书籍,全书以英文撰写,由Apress出版社出版。Kinect原本是微软公司为XBOX游戏机设计...
"mirosoft.office.core"的DLL(动态链接库)就是这样的一个组件,它提供了与Microsoft Office套件,特别是Word,进行深度交互的能力。这篇内容将深入探讨如何在C#编程环境下使用这个DLL以及它能为开发者带来的便利。...
标题中的“如何重装Windows Microsoft Store”意味着我们将讨论在Windows操作系统上重新安装或修复Microsoft Store应用的步骤。这个过程对于那些遇到商店应用故障或者需要更新到最新版本的用户来说非常有用。...
这是老版的汇编连接程序,因为老才珍贵吗,给大家看看用用
### 如何在微软Edge浏览器中清除浏览历史记录 随着互联网技术的发展与普及,浏览器成为我们日常生活中不可或缺的一部分。为了保护个人隐私以及优化浏览器性能,定期清理浏览器的历史记录变得尤为重要。...
语言:English ...有关此扩展程序支持的域的列表,请访问https://github.com/bjornstar/intercept-redirect对于Mozilla Firefox用户-https://intercept-redirect.firefox.bjornstar.com对于Mirosoft Edge用户- ...
#### 系统要求与环境配置 ... ##### 操作系统兼容性 ...- **Windows Server 2003 Service Pack 1** - **Windows XP Service Pack 3** ...以上列出的操作系统均经过验证,确保可以支持该驱动程序正常运行。...
Microsoft Visual C++ 2010 Redistributable Package 10.0.40219 是一个关键的软件组件,对于许多依赖于Microsoft Visual C++运行时库的应用程序来说,它是必不可少的。这个包包括了运行时库的动态链接库(DLLs),...
how we test software at microsoft, 英文版
微软公司开发的移动应用架构平台。使用该架构,不仅能够在智能手机等高级移动终端上使用Web服务,而且全世界数百万Visual Studio NET开发人员能够轻松地在Pocket PC OS上开发移动应用程序。
此外,文中还提到了一些编程语言和开发环境,例如Matlab、Visual C++、Mirosoft C#等,这些工具的使用对于实现机器人智能运动控制策略的模拟、调试和部署是必不可少的。文档中出现的DOI、A1003-188X等参考信息,反映...
《Microsoft.UI.Xaml.2.6:解锁Windows 11安卓子系统的关键组件》 在现代技术日新月异的今天,微软不断推出新的技术创新来满足用户需求。其中一个引人注目的举措是微软应用商店(Microsoft Store)对应用程序大小...
PDF虚拟打印机技术是一种在计算机操作系统中模拟真实打印机的功能,它允许用户将任何可打印文档转换为PDF(Portable Document Format)格式。在Windows 7系统中,Microsoft提供了一种名为"Microsoft Print to PDF"的...
Liveries Mega Pack Manager 飞行模拟器2020的易于使用的涂装管理器。用法加入官方Liveries Mega Pack Discord服务器: ://discord.gg/megapack 下载最新的管理器版本: : 按照说明完成设置。安装配件前往“可用的...
TTS 文本到语音。 TTS (TXT) 从字符串 TXT 合成语音,然后说出来。 音频格式默认为单声道、16 位、... 此功能需要 Mirosoft Win32 Speech API (SAPI)。 例子: % 朗读课文; tts('我会说话。'); % 列出可用的声音; t
在这个场景中,"mirosoft"可能是与该系统相关的软件开发商,暗示了可能使用了微软的技术或平台。 一、叫号Speaker硬件设备: 叫号Speaker硬件通常是小型化的音频播放设备,它们连接到叫号系统,接收来自服务器的...
订单管理系统 先决条件: Microsoft SQL Server 2012 Express Edition或更高版本,并... 报告Mirosoft RDLC + Syncfusion Report Viewer 订单搜索Reactive Extensions for .NET 部署- Click Once on Microsoft Azure