Java优化时间空间的方法

1、函数的参数个数会影响运行速度

参数的数目直接影响调用函数的速度,参数越多,调用函数就越慢。

2、成员变量比局部变量占用空间更小

java中的成员变量和全局变量的区别:

成员变量(java中相当于C语言中的全局变量)

  • 成员变量定义在类中,在整个类中都可以被访问。
  • 成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。
  • 成员变量有默认初始化值。

局部变量

  • 局部变量只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效。
  • 局部变量存在于栈内存中,作用的范围结束,变量空间会自动释放。
  • 局部变量没有默认初始化值
在使用变量时需要遵循的原则为:就近原则
首先在局部范围找,有就使用;接着在成员位置找。

3、Java更快的输入输出

时间和空间都缩短为原来的1/3-1/5左右

定义输入和输出

StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));

输入方式

in.nextToken();
int n = (int) in.nval;//相当于int n = in.nextInt();

输出方式

out.println("HelloWorld!");
out.printf("HelloWorld!");
out.print("HelloWorld!");

out.flush();//代码最末

用法实例:oj-https://www.luogu.com.cn/problem/P2249

P2249 【深基13.例1】查找

package 二分查找与二分答案;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;

public class P2249查找 {
	static int[] a;
	static int n;
	public static void main(String[] args) throws IOException {
		StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
		PrintWriter out=new PrintWriter(new OutputStreamWriter(System.out));
		in.nextToken();
		n=(int)in.nval;//相当于int n = in.nextInt();
		in.nextToken();
		int m=(int)in.nval;
		a=new int [n+1];
		int[] b=new int [m+1];
		a[0]=-1;//有可能会要查找等于0的数,所以我们把第一个改成-1
		for(int i=1;i<=n;i++) {
			in.nextToken();
			a[i]=(int)in.nval;
		}
		for(int i=1;i<=m;i++) {
			in.nextToken();
			b[i]=(int)in.nval;
			out.print(find(b[i])+" ");
		}
		out.flush();
	}
	static int find(int x) {//参数的数目直接影响调用函数的速度,参数越多,调用函数就越慢.这题如果函数是两个参数,就会超时。
		int l=1,r=n;
		while(l<r) {
			int mid=l+(r-l)/2;
			if(a[mid]>=x)r=mid;// 如果中间值大于等于目标值就继续往左边找
			else l=mid+1;
		}
		if(a[l]==x)return l;
		else return -1;
	}
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值