奇偶数分离(水题)---引发String和数组的比较

地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=11

奇偶数分离

时间限制: 3000 ms  |  内存限制: 65535 KB
难度: 1
描述
有一个整型偶数n(2<= n <=10000),你要做的是:先把1到n中的所有奇数从小到大输出,再把所有的偶数从小到大输出。
输入
第一行有一个整数i(2<=i<30)表示有 i 组测试数据;
每组有一个整型偶数n。
输出
第一行输出所有的奇数
第二行输出所有的偶数
样例输入
2
10
14
样例输出
1 3 5 7 9 
2 4 6 8 10 

1 3 5 7 9 11 13 
2 4 6 8 10 12 14 

思路与想法:

这道题的第一个想法是:太简单了,直接一个for循环,然后判断奇数和偶数,然后存储再输出来。第二个考虑的是用什么存储呢?

此时第一个想法是用String str="",直接 str+=i; 然后就完事了。但是想起一次蓝桥杯的比赛,我正式用String来处理本身是数字的情况,结果好久都没有出来。连续做了几道题,到回来看的时候,还是没有出现,再加上String的存储也是有范围的,一直都没有留意,一直觉得简单就完事了,当时还抛出异常。

String的最大长度:http://www.blogjava.net/killme2008/archive/2009/01/15/251368.html

就这道题,用String和数组实现,发现两个耗时和内存占用方面,是两个不同的级别。看来想要简单,还是要付出代价的。

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		while(n-->0){
			int length=sc.nextInt();
			new Main().intSort(length);
		}
	}
	/**
	 * 耗时+内存:874	 4306
	 */
	public void strSort(int length){
		String strA="",strB="";
		for(int i=1;i<=length;i++){
			if(i%2==0)
				strB+=i+" ";
			else
				strA+=i+" ";
		}
		System.out.print(strA+"\n"+strB+"\n");
	}
	/**
	 * 耗时+内存:127	 1822
	 */
	public void intSort(int length){
		int[] odd=new int[length/2+1];	//都加上1,这样无论是奇数还是偶数都保险,不会溢出
		int[] even=new int[length/2+1];
		int oddTmp=0,evenTmp=0;
		for(int i=0;i<=length;i++){
			if(i%2==0)
				even[evenTmp++]=i;
			else
				odd[oddTmp++]=i;
		}
		for(int x:odd)
			if(x!=0)
				System.out.print(x+" ");
		System.out.println();
		for(int y:even)
			if(y!=0)
				System.out.print(y+" ");
		System.out.println();
	}
}
很明显 耗时+内存:874 4306 一个:耗时+内存:127 1822   差得太远了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值