有关算法的程序题

简介:

今天上网的时候看到这样一道程序题,做完后觉得很经典,写出来与大家分享。

算法程序题: 该公司笔试题就1个,要求在10分钟内作完。 题目如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。

 

 
  1. static int[] bits = new int[] { 1, 2, 3, 4, 5 }; 
  2.  
  3. /** 
  4.  * @param args 
  5.  */ 
  6. public static void main(String[] args) { 
  7. sort("", bits); 
  8.  
  9. private static void sort(String prefix, int[] a) { 
  10. if (a.length == 1) { 
  11. System.out.println(prefix + a[0]); 
  12.  
  13. for (int i = 0; i < a.length; i++) { 
  14. sort(prefix + a[i], copy(a, i)); 
  15.  
  16. private static int[] copy(int[] a,int index){ 
  17. int[] b = new int[a.length-1]; 
  18. System.arraycopy(a, 0, b, 0, index); 
  19. System.arraycopy(a, index+1, b, index, a.length-index-1); 
  20. return b; 

基本思路: 1 把问题归结为图结构的遍历问题。实际上6个数字就是六个结点,把六个结点连接成无向连通图,对于每一个结点求这个图形的遍历路径,所有结点的遍历路径就是 最后对这6个数字的排列组合结果集。 2 显然这个结果集还未达到题目的要求。从以下几个方面考虑: 1. 3,5不能相连:实际要求这个连通图的结点3,5之间不能连通, 可在构造图结构时就满足改条件,然后再遍历图。 2. 不能有重复: 考虑到有两个2,明显会存在重复结果,可以把结果集放在TreeSet中过滤重复结果 3. 4不能在第三位: 仍旧在结果集中去除满足此条件的结果。 采用二维数组定义图结构,最后的代码是:

 

 
  1. import java.util.Iterator; 
  2. import java.util.TreeSet; 
  3.  
  4. public class TestQuestion { 
  5.  
  6. private String[] b = new String[]{"1", "2", "2", "3", "4", "5"}; 
  7. private int n = b.length; 
  8. private boolean[] visited = new boolean[n]; 
  9. private int[][] a = new int[n][n]; 
  10. private String result = ""
  11. private TreeSet set = new TreeSet(); 
  12.  
  13. public static void main(String[] args) { 
  14. new TestQuestion().start(); 
  15.  
  16. private void start() { 
  17.  
  18. // Initial the map a[][] 
  19. for (int i = 0; i < n; i++) { 
  20. for (int j = 0; j < n; j++) { 
  21. if (i == j) { 
  22. a[i][j] = 0; 
  23. } else { 
  24.     a[i][j] = 1; 
  25.  
  26. // 3 and 5 can not be the neighbor. 
  27. a[3][5] = 0; 
  28. a[5][3] = 0; 
  29.  
  30. // Begin to depth search. 
  31. for (int i = 0; i < n; i++) { 
  32.     this.depthFirstSearch(i); 
  33.  
  34. // Print result treeset. 
  35. Iterator it = set.iterator(); 
  36. while (it.hasNext()) { 
  37. String string = (String) it.next(); 
  38. // "4" can not be the third position. 
  39. if (string.indexOf("4") != 2) { 
  40. System.out.println(string); 
  41.  
  42. private void depthFirstSearch(int startIndex) { 
  43. visited[startIndex] = true; 
  44. resultresult = result + b[startIndex]; 
  45. if (result.length() == n) { 
  46. // Filt the duplicate value. 
  47. set.add(result); 
  48. for(int j = 0; j < n; j++) { 
  49. if (a[startIndex][j] == 1 && visited[j] == false) { 
  50. depthFirstSearch(j); 
  51. } else { 
  52. continue; 
  53.  
  54. // restore the result value and visited value after listing a node. 
  55.     resultresult = result.substring(0, result.length() -1); 
  56.     visited[startIndex] = false; 

怎么样,很有收获吧,哈哈


本文转自sucre03 51CTO博客,原文链接:http://blog.51cto.com/sucre/416697,如需转载请自行联系原作者


相关文章
|
9月前
|
存储 算法 生物认证
基于Zhang-Suen算法的图像细化处理FPGA实现,包含testbench和matlab验证程序
本项目基于Zhang-Suen算法实现图像细化处理,支持FPGA与MATLAB双平台验证。通过对比,FPGA细化效果与MATLAB一致,可有效减少图像数据量,便于后续识别与矢量化处理。算法适用于字符识别、指纹识别等领域,配套完整仿真代码及操作说明。
|
12月前
|
PyTorch 算法框架/工具 C++
人工智能算法python程序运行环境安装步骤整理
本教程详细介绍Python与AI开发环境的配置步骤,涵盖软件下载、VS2017安装、Anaconda配置、PyCharm设置及组件安装等内容,适用于Windows系统,助你快速搭建开发环境。
|
存储 算法 C语言
"揭秘C语言中的王者之树——红黑树:一场数据结构与算法的华丽舞蹈,让你的程序效率飙升,直击性能巅峰!"
【8月更文挑战第20天】红黑树是自平衡二叉查找树,通过旋转和重着色保持平衡,确保高效执行插入、删除和查找操作,时间复杂度为O(log n)。本文介绍红黑树的基本属性、存储结构及其C语言实现。红黑树遵循五项基本规则以保持平衡状态。在C语言中,节点包含数据、颜色、父节点和子节点指针。文章提供了一个示例代码框架,用于创建节点、插入节点并执行必要的修复操作以维护红黑树的特性。
534 1
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
638 1
|
存储 缓存 算法
通过优化算法和代码结构来提升易语言程序的执行效率
通过优化算法和代码结构来提升易语言程序的执行效率
492 2
|
算法 测试技术 开发者
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗;代码审查通过检查源代码发现潜在问题,提高代码质量和团队协作效率。本文介绍了一些实用的技巧和工具,帮助开发者提升开发效率。
280 3
|
存储 缓存 算法
如何通过优化算法和代码结构来提升易语言程序的执行效率?
如何通过优化算法和代码结构来提升易语言程序的执行效率?
594 5
|
监控 算法 数据安全/隐私保护
基于三帧差算法的运动目标检测系统FPGA实现,包含testbench和MATLAB辅助验证程序
本项目展示了基于FPGA与MATLAB实现的三帧差算法运动目标检测。使用Vivado 2019.2和MATLAB 2022a开发环境,通过对比连续三帧图像的像素值变化,有效识别运动区域。项目包括完整无水印的运行效果预览、详细中文注释的代码及操作步骤视频,适合学习和研究。
|
缓存 分布式计算 监控
算法优化:提升程序性能的艺术
【10月更文挑战第20天】算法优化:提升程序性能的艺术
|
监控 算法 Java
Java虚拟机(JVM)使用多种垃圾回收算法来管理内存,以确保程序运行时不会因为内存不足而崩溃。
【6月更文挑战第20天】Java JVM运用多种GC算法,如标记-清除、复制、标记-压缩、分代收集、增量收集、并行收集和并发标记,以自动化内存管理,防止因内存耗尽导致的程序崩溃。这些算法各有优劣,适应不同的性能和资源需求。垃圾回收旨在避免手动内存管理,简化编程。当遇到内存泄漏,可以借助VisualVM、JConsole或MAT等工具监测内存、生成堆转储,分析引用链并定位泄漏源,从而解决问题。
220 4

热门文章

最新文章