分析一道经典的Java算法笔试题

开发 后端 算法
本文简要介绍Java算法面试题,主要是为了帮助大家理清基本的思路,这道题对于作者来说,最大的遗憾是学习数据结构时没有吃透。

Java算法程序题:

该公司笔试题就1个,要求在10分钟内作完。

题目如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。

Java算法基本思路:

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. visited =falsh;  
  10. private int[][] a = new int[n][n];  
  11. private String result = "";  
  12. private TreeSet TreeSet = new TreeSet();  
  13.  
  14. public static void main(String[] args) {  
  15. new TestQuestion().start();  
  16. }  
  17.  
  18. private void start() {  
  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. }  
  27. }a[3][5] = 0;  
  28. a[5][3] = 0;  
  29. for (int i = 0; i < n; i++) {  
  30.     this.depthFirstSearch(i);  
  31. }  
  32. Iterator it = set.iterator();  
  33. while (it.hasNext()) {  
  34. String string = (String) it.next();  
  35.  
  36. if (string.indexOf("4") != 2) {  
  37. System.out.println(string);  
  38. }  
  39. }  
  40. }  
  41.  
  42. private void depthFirstSearch(int startIndex) {  
  43. visited[startIndex] = true;  
  44. resultresult = result + b[startIndex];  
  45. if (result.length() == n) {  
  46. TreeSet .add(result);  
  47. }  
  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. }  
  55.     resultresult = result.substring(0, result.length() -1);  
  56.     visited[startIndex] = false;  
  57. }  
  58. }  
  59.  

注:郁闷,花了半个多小时才能写出来,还是看的提示!!!无向图,学数据结构时对他就不是很感冒

【编辑推荐】

  1. Java连接MySQL中文乱码处理
  2. 在Java应用程序中使用Jfreechart配置
  3. Java虚拟机内部构成浅析
  4. 浅谈Java线程的生命周期
  5. 关于Java继承的一些复习
责任编辑:张燕妮 来源: cnblogs
相关推荐

2009-09-08 17:45:06

CCNA考题

2019-10-21 10:57:56

MySQL算法数据库

2014-04-29 14:58:24

笔试题微软笔试题

2009-07-07 16:20:31

JSP试题

2015-04-22 12:19:42

JAVAJAVA面试题答案解析

2021-03-02 11:29:50

算法算法分析前端

2021-05-09 19:42:25

笔试题前端算法

2021-04-30 08:22:36

异步求和函数

2009-08-11 10:12:07

C#算法

2020-11-11 09:19:37

前端优化面试

2009-08-11 14:59:57

一道面试题C#算法

2009-08-11 15:09:44

一道面试题C#算法

2023-04-27 09:08:19

JavaScript隐式类型转换

2018-03-06 15:30:47

Java面试题

2018-03-02 08:50:54

Linux面试题offer技巧

2023-02-04 18:24:10

SeataJava业务

2019-08-13 08:43:07

JavaScript前端面试题

2020-07-14 16:08:33

数据分析Python笔试

2009-06-15 17:18:25

Java笔试题

2021-01-26 13:14:14

js前端map
点赞
收藏

51CTO技术栈公众号