算法程序题:
该公司笔试题就1个,要求在10分钟内作完。
题目如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。
基本思路:
1 把问题归结为图结构的遍历问题。实际上6个数字就是六个结点,把六个结点连接成无向连通图,对于每一个结点求这个图形的遍历路径,所有结点的遍历路径就是最后对这6个数字的排列组合结果集。
2 显然这个结果集还未达到题目的要求。从以下几个方面考虑:
1. 3,5不能相连:实际要求这个连通图的结点3,5之间不能连通, 可在构造图结构时就满足改条件,然后再遍历图。
2. 不能有重复: 考虑到有两个2,明显会存在重复结果,可以把结果集放在TreeSet中过滤重复结果
3. 4不能在第三位: 仍旧在结果集中去除满足此条件的结果。
采用二维数组定义图结构,最后的代码是:
import java.util.Iterator;
import java.util.TreeSet;
public class TestQuestion {
private String[] b = new String[]{"1", "2", "2", "3", "4", "5"};
private int n = b.length;
private boolean[] visited = new boolean[n];
visited =falsh;
private int[][] a = new int[n][n];
private String result = "";
private TreeSet TreeSet = new TreeSet();
public static void main(String[] args) {
new TestQuestion().start();
}
private void start() {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i == j) {
a[i][j] = 0;
} else {
a[i][j] = 1;
}
}
}a[3][5] = 0;
a[5][3] = 0;
for (int i = 0; i < n; i++) {
this.depthFirstSearch(i);
}
Iterator it = set.iterator();
while (it.hasNext()) {
String string = (String) it.next();
if (string.indexOf("4") != 2) {
System.out.println(string);
}
}
}
private void depthFirstSearch(int startIndex) {
visited[startIndex] = true;
result = result + b[startIndex];
if (result.length() == n) {
TreeSet .add(result);
}
for(int j = 0; j < n; j++) {
if (a[startIndex][j] == 1 && visited[j] == false) {
depthFirstSearch(j);
} else {
continue;
}
}
result = result.substring(0, result.length() -1);
visited[startIndex] = false;
}
}
分享到:
相关推荐
JAVA经典算法面试39题及答案 本资源总结了39道经典的 JAVA 算法面试题目,每个题目都附带答案,涵盖了常见的算法问题,旨在帮助读者更好地掌握 JAVA 编程语言和算法设计。 算法概述 算法是计算机科学中最重要的...
JAVA经典算法40面试题 本资源摘要信息涵盖了JAVA经典算法40面试题,包含基本的算法面试代码题。以下是对标题、描述、标签和部分内容的详细解释: 一、标题:“JAVA经典算法40面试题” 该标题表明该资源是关于JAVA...
在Java面试中,算法题是考察候选人编程能力的重要环节。这里我们探讨三个常见的算法问题及其解决方案。 **问题1:斐波那契数列(Fibonacci Sequence)** 斐波那契数列是一个序列,其中每个数字是前两个数字的和。...
内含: JavaOOP面试题 Java集合/泛型面试题 Java异常面试题 Java中的IO与NIO面试题 Java反射面试题 Java序列化面试题 ...算法面试题 Elasticsearch 面试题 Kafka 面试题 微服务 面试题 Linux面试题
Java经典算法90题含源码及答案的资源是一份非常宝贵的资料,它涵盖了大量用于提升Java编程技能和算法理解的题目。这份压缩包包含了三份文档:JAVA经典算法40题.doc、最新JAVA编程题全集_50题及答案.doc、50道JAVA...
面试题包含了不同技术层面的面试问题,同时也能对一些没有面试开发经验的小白给予不可估量的包装, 让你的薪水绝对翻倍, 本人亲试有效.Java面试题84集、java面试专属及面试必问课程,所有的面试题有视屏讲解, 解答方案....
本资料集合了Java面试中常见的问题和经典算法的实现,旨在帮助应聘者提升自己的技能水平,顺利通过面试。 1. **Java基础知识** - **内存管理**:Java使用自动垃圾回收机制,理解如何分配、使用和回收内存是基础。...
Java经典算法题是程序员在开发过程中常常需要面对的挑战,它们可以帮助我们提升编程思维,优化问题解决能力,尤其是在处理复杂数据结构和高效计算时显得尤为重要。这个压缩包中包含了一份名为"JAVA经典算法40题.doc...
在Java笔试面试中,算法题是考察候选者编程能力、逻辑思维和问题解决能力的关键环节。这些题目通常涵盖数据结构、排序、搜索、图论等多个领域,涉及到的基础知识包括但不限于以下内容: 1. **基础算法**:如冒泡...
【Java 算法与编程面试题】是针对求职者准备的一个重要环节,尤其是在IT行业中,熟练掌握算法和编程能力是必备技能。本题主要涵盖了两方面内容:身份证号码合法性验证以及两个文件中单词的交替合并。 首先,我们来...
此外,这个资源库还可能包含经典的算法小题,如回溯法、动态规划、贪心算法等。回溯法用于解决约束满足问题,通过试探性的步骤来解决问题,当发现某步无效时,会撤销这一步,尝试其他路径。动态规划则是一种通过将...
Java面试经典算法 Java 面试经典算法是指在 Java 面试中经常会被问到的算法题目,这些题目涵盖了数据结构、算法设计、编程语言基础知识等方面的知识。本文总结了 17 道 Java 面试经典算法题目,并对每道题目进行了...
这里我们将根据"Java面试题全集(上)(中)(下)合集"来探讨这些核心知识点。 1. **基础语法**:这部分通常考察Java的基本数据类型、变量、运算符、流程控制(if,switch,for,while,do...while)、方法的定义...
在 Java 中,字符串分割算法是非常常见的面试题之一。本文中提供了一个使用 StringTokenizer 类实现字符串分割的示例代码,然而,该方法已不再被推荐使用,取而代之的是使用 String 类的 split 方法,该方法更简洁、...
以下是一些热门的Java算法面试题及其详细解释: 1. **双指针问题**:常用于解决数组相关的问题,如寻找两个数之和等于目标值,或者在有序数组中查找重复元素等。通过维护两个指针,一个从左向右移动,另一个从右向...
这份"50道Java程序算法题"的压缩包显然旨在帮助开发者提升算法设计和实现能力。下面,我们将深入探讨这些标签所涵盖的知识点,并根据提供的文件名推测可能的结构。 1. **Java基础**:作为Java程序员,对语言的基础...
JAVA面试100题
【Java面试题】 在Java面试中,面试官通常会考察候选人的算法基础以及数据库操作能力。这包括但不限于数据结构的理解、算法设计与分析、以及SQL的熟练运用。以下是相关知识点的详细介绍: 1. **算法基础**: - **...