Java面试题:猫吃老鼠问题
问题:现有n个老鼠围成一圆圈,有一只猫从任意位置开始吃老鼠,每次都隔一个老鼠吃,请给出最后一个老鼠的编号?题目要求是任给老鼠数n,输出猫最后吃的老鼠的编号。
我的解法:
1.简单的方法就是模拟这个过程。使用一个数组代表老鼠是否被吃掉,循环遍历。
2.改进一下的方法,其实这个问题就是一个m=2的约瑟夫环问题。
package com.easyProblem;
/*
* 现有n个老鼠围成一圆圈,有一只猫从任意位置开始吃老鼠,每次都隔一个老鼠吃,
* 请给出最后一个老鼠的编号?题目要求是任给老鼠数n,输出猫最后吃的老鼠的编号
*/
public class CatEatMouseProblem {
private int[] m;
public static void main(String[] args) {
CatEatMouseProblem cm = new CatEatMouseProblem();
System.out.println("=======低效的方法========");
long startTime =System.currentTimeMillis();
System.out.println(cm.easyWork(1111178));
long endTime=System.currentTimeMillis();
System.out.println("耗时:" + (endTime-startTime));
System.out.println("=======改进的方法========");
startTime =System.currentTimeMillis();
System.out.println(cm.betterWork(1111178));
endTime=System.currentTimeMillis();
System.out.println("耗时:" + (endTime-startTime));
}
public int easyWork(int n){
m = new int[n];
int mouse = n;
int flag = 0;
m[0] = 1;
mouse--;
while(mouse>1){
flag = next(next(flag));
m[flag] = 1;
mouse--;
}
return next(flag)+1;
}
public int next(int start){
for(int i=start+1; i<start+m.length; i++){
int pos = i%(m.length);
if(m[pos]!=1) {
return pos;
}
}
return -1;
}
public int betterWork(int n){
int m = 2;
int s = 0;
for(int i=2; i<=n-1; i++) s=(s+m)%i;
return s+2;
}
}
=======低效的方法========
125204
耗时:953
=======改进的方法========
125204
耗时:31
相关文档:
关于java虚拟机使用内存的思考
JVM(java虚拟机)其实就是操作系统(如windows)上的一个普通程序(进程名叫java,这个程序可以解释执行class文件)。
当java进程启动时会首先分配一块堆内存(最小内存),以后每当class字节码程序要求JVM(java进程)分配内存时,JVM
就会在预先分配的那块内存上面为class字节 ......
Reflection 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性。例如,使用它能获得 Java 类中各成员的名称并显示出来。
Java 的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性。例如,Pasc ......
java获取当前路径
1、利用System.getProperty()函数获取当前路径:
System.out.println(System.getProperty("user.dir"));//user.dir指定了当前的路径
2、使用File提供的函数获取当前路径:
File directory = new File("");//设定为当前文件夹
try{
System.out.println(directory.getCano ......
/*通过鼠标拖放文件到制定控件中,并判断是否为文件,如果是,则调用文件发送方法ChatFrame.SendFile(finalpath);
*/
class TextDropTargetListener implements DropTargetListener
{
CODER Coder = new CODER();
CHAT_FRAME ChatFrame;
/**
Constructs a listener.
@param aTextArea the ......
java心得!--很好的java学习历程(转自张国宝) 收藏 此文于2009-10-26被推荐到CSDN首页
如何被推荐?
1. 数组有没有length()这个方法? String有没有length()这个方法?
答:数组没有length()这个方法,有length的属性。
......