求助。java解算法题优化,总是超时

椰子是只猫 2017-03-15 11:32:56

题目是不难。但是时间要求比较苛刻,总是超时。
无论是一维数组、二位数组储存,都试过了。也用list存储试过。都是部分测试数据超时。
本人小白一个,关于算法优化方面是一窍不通。请大家帮忙想一下。
本人写的部分代码如下:

一维数组:

import java.util.Scanner;
public class Main {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();

String str1[] = new String[a]; //准考证
String str2[] = new String[a]; //试机座位
String str3[] = new String[a]; //考场

for (int i=0;i<a;i++) {
str1[i] = sc.next();
str2[i] = sc.next();
str3[i] = sc.next();
}

int n = sc.nextInt();
int arr[] = new int[n];
for (int i=0;i<n;i++) {
arr[i] = sc.nextInt();
}

//查找
for (int i=0;i<n;i++) {
for (int j=0;j<a;j++) {
if (arr[i]==Integer.parseInt(str2[j])) {
System.out.println(str1[j] +" "+str3[j]);
}
}
}
}
}



通过list除去已选出的数据

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {

/**
* @param args
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();

String str1[] = new String[a]; //准考证
String str2[] = new String[a]; //试机座位
String str3[] = new String[a]; //考场
List array = new ArrayList();

for (int i=0;i<a;i++) {
str1[i] = sc.next();
str2[i] = sc.next();
str3[i] = sc.next();
array.add(str2[i]);
}

int n = sc.nextInt();
int arr[] = new int[n];
for (int i=0;i<n;i++) {
arr[i] = sc.nextInt();
}

//查找
for (int i=0;i<n;i++) {
// for (ListIterator iter = array.listIterator();iter.hasNext();) {
for (int j=0;j<array.size();j++) {
if (arr[i]==Integer.parseInt((String) array.get(j))) {
System.out.println(str1[j] +" "+str3[j]);
array.remove(j);
}
}
}
}
}
...全文
471 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ITjavaman 2017-03-16
  • 打赏
  • 举报
回复
galiniur0u 2017-03-16
  • 打赏
  • 举报
回复
忘了加循环输入了

public class Position {
	public static void main(String[] args){
		 Scanner sc = new  Scanner(System.in);
        int a = sc.nextInt();
         
        String str1[] = new String[a];    //准考证
        int str2[] = new int[a];    //试机座位
        String str3[] = new String[a];    //考场
         
        for (int i=0;i<a;i++) {
        	String zhun = sc.next();
        	int ji = sc.nextInt();
        	String kao = sc.next();
            str1[ji] = zhun;
            str2[ji] = ji;
            str3[ji] = kao;
        }
         
        int n = sc.nextInt();
        for (int i=0;i<n;i++) {
        	int ji = sc.nextInt();
        	System.out.println(str1[ji] + " " + str3[ji]);
        }
	}
}
galiniur0u 2017-03-16
  • 打赏
  • 举报
回复
楼主可以试试

public class Position {
	public static void main(String[] args){
		 Scanner sc = new  Scanner(System.in);
        int a = sc.nextInt();
         
        String str1[] = new String[a];    //准考证
        int str2[] = new int[a];    //试机座位
        String str3[] = new String[a];    //考场
         
        for (int i=0;i<a;i++) {
        	String zhun = sc.next();
        	int ji = sc.nextInt();
        	String kao = sc.next();
            str1[ji] = zhun;
            str2[ji] = ji;
            str3[ji] = kao;
        }
         
        int n = sc.nextInt();
        System.out.println(str1[n] + " " + str3[n]);
	}
}
椰子是只猫 2017-03-15
  • 打赏
  • 举报
回复
引用 2 楼 ITjavaman 的回复:
找到了题目来源和评测方法,修改了下

public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();

Map<String, String> map = new HashMap<>();
StringBuffer sb = null;
String s = new String();
for (int i=0;i<a;i++) {
sb = new StringBuffer();
sb.append(sc.next());
s = sc.next();
sb.append(" ");
sb.append(sc.next());
map.put(s, sb.toString());
}

int n = sc.nextInt();
String arr[] = new String[n];
for (int i=0;i<n;i++) {
arr[i] = sc.next();
}

for (int i=0;i<n;i++) {
System.out.println(map.get(arr[i]));
}
}
}

测试了一下。。。还是超时
椰子是只猫 2017-03-15
  • 打赏
  • 举报
回复
这是个比赛的练习系统的题。。。。。从练习系统上测得。。。
ITjavaman 2017-03-15
  • 打赏
  • 举报
回复
找到了题目来源和评测方法,修改了下

public class Main {
	 public static void main(String[] args) {
		 Scanner sc = new  Scanner(System.in);
	        int a = sc.nextInt();
	         
	        Map<String, String> map = new HashMap<>();
	        StringBuffer sb = null;
	        String s = new String();
	        for (int i=0;i<a;i++) {
	        	sb = new StringBuffer();
	            sb.append(sc.next());
	            s = sc.next();
	            sb.append(" ");
	            sb.append(sc.next());
	            map.put(s, sb.toString());
	        }
	         
	        int n = sc.nextInt();
	        String arr[] = new String[n];
	        for (int i=0;i<n;i++) {
	            arr[i] = sc.next();
	        }

	        for (int i=0;i<n;i++) {
	             System.out.println(map.get(arr[i]));
	        }
	    }
}
ITjavaman 2017-03-15
  • 打赏
  • 举报
回复
想请问下你是怎么测试内存和运行时间的

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧