==============================
==============================
算法程序题:
题目如下:用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;
}
}
========================================
========================================
第二个题目:
50个人围成一圈数到三和三的倍数时出圈,问剩下的人是谁?在原来的位置是多少?
答案:
- package com.test.kaoshi;
-
- import java.util.Iterator;
- import java.util.LinkedList;
-
- public class YouXi {
- public static int removeNM(int n, int m) {
- LinkedList ll = new LinkedList();
- for (int i = 0; i < n; i++)
- ll.add(new Integer(i + 1));
- int removed = -1;
- while (ll.size() > 1) {
- removed = (removed + m) % ll.size();
- ll.remove(removed--);
- }
- return ((Integer) ll.get(0)).intValue();
- }
-
- public static void main(String[] args) {
- System.out.println(removeNM(50, 3));
- }
- }
分享到:
相关推荐
为了在Java面试中脱颖而出,了解和掌握常见的面试题及答案至关重要。以下是一些关键知识点的详细解析: 1. **super()与 this()的区别** `super()`用于调用父类的构造器,确保子类实例化时父类的初始化;`this()`则...
不同算法适用于不同的场景,例如新生代垃圾收集主要使用复制算法,而老年代则使用标记整理算法。 Java中有四种引用类型,分别是强引用、软引用、弱引用和虚引用。强引用是通常的引用,只要强引用还存在,对象就不会...
根据给定的信息,本文将对Java面试中常见的算法题进行详细的解析与总结,特别是针对冒泡排序和选择排序这两种基础但重要的排序算法。 ### 冒泡排序 #### 算法原理 冒泡排序是一种简单的排序算法。它重复地遍历要...
Java企业面试题主要涵盖了许多核心概念,包括算法、内存管理、数据结构以及数据库操作等。以下是对这些知识点的详细解析: 1. **递归求和**:题目要求构建一个计算1到100整数之和的函数。这是一个简单的递归实现,...
### Java企业面试题知识点梳理 #### 一、Java面向对象基础 **1. super()与this()的区别** - **super()**: 是指父类构造器的引用,用于调用父类的构造方法或访问父类的成员。在子类构造器中使用 `super()` 可以调用...
3. **内存管理**:Java的内存管理主要通过垃圾收集机制实现,面试中可能会讨论内存的分配、对象的生命周期、垃圾回收算法(如标记-清除、复制、标记-整理、分代收集)及其优缺点。 4. **多线程**:Java提供了丰富的...
Java面试中的算法题是考察候选人在编程基础和问题解决能力上的重要环节。冒泡排序作为经典的基本排序算法,经常在面试中出现,因为它的逻辑相对简单,适合测试面试者的编程思维和对时间复杂度的理解。 冒泡排序的...
Java面试题整理主要涵盖了许多Java编程的核心概念和实践问题,这些问题可以帮助面试者检验他们的技能和对Java语言的理解程度。以下是一些重点知识点的详细说明: 1. **面向对象**:这是Java的基础,包括封装、继承...
### Java最新笔试面试题知识点详解 #### 第一部分:JAVA基础 ##### 1.1 JAVA语言基础 本章节主要涵盖Java语言的基础知识,包括但不限于运算符、转义字符、循环结构、排序方法以及Java的基本类型等内容。 **...
Java基础是每位Java开发者必备的知识体系,而面试题则是检验这些知识掌握程度的重要途径。以下是一些关于Java基础的常见面试题,涵盖了从基础概念到高级特性的各个方面: 1. **Java简介** - 什么是Java?Java是一...
根据提供的文件信息,我们可以归纳出以下几个关键的知识点: ### 1. 冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法。...这些知识点对于 Java 面试来说是非常重要的,希望对读者有所帮助。
Java 基础算法与数据结构面试题 在 Java 开发中,算法和数据结构是两个非常重要的概念。它们是程序设计的基础,能否编写出高效、可靠的程序很大程度上取决于开发者的算法和数据结构知识。本文将从选择排序、插入...
Java面试题汇集涵盖了广泛的Java基础知识和高级特性,是准备Java面试的重要参考资料。以下是对一些关键知识点的详细说明: 1. **集合类与集合框架**:包括HashMap、HashTable和ConcurrentHashMap。HashMap是非同步...
Java 技术面试题整理 以下是 Java 技术面试题整理的知识点: 1. Servlet 执行流程: * 客户端发出 HTTP 请求 * Web 服务器将请求转发到 Servlet 容器 * Servlet 容器解析 URL 并根据 web.xml 找到相应的 Servlet ...
【Java企业面试题整理2011】涵盖了多个Java编程基础和高级概念,以下是其中一些重要知识点的详细解析: 1. **递归求和**: - 问题1描述了一个计算1到100整数之和的递归函数。递归是函数调用自身的一种方法,通常...
### JAVA面试题集知识点梳理 #### 一、Java基础知识 1. **字符串不可变性**: - **问题**:Java中的String是否可变? - **解释**:在Java中,`String` 类的对象是不可变的。一旦创建了一个 `String` 对象,其值...
Java面试题精华集包含了众多Java开发者在面试过程中可能会遇到的核心知识点,主要针对阿里巴巴、腾讯、字节跳动和华为等知名公司常见的面试题目。这些题目旨在考察候选人的基础理论、编程能力、解决问题的能力以及对...
【Java常见面试题汇总2023】 在2022至2023年的面试季,Java开发者面临着一系列涵盖广泛技术领域的面试挑战。这些挑战包括但不限于基础的Java SE、高级的Spring框架、多线程处理、容器技术、数据库管理和缓存系统如...
根据提供的文件信息,我们可以整理出一系列与Java编程语言...以上是根据给定的文件信息整理出来的 Java 面试题知识点及其详细解释。这些知识点覆盖了 Java 编程语言的核心概念和技术,对于准备 Java 面试非常有帮助。