BAT实习内推笔试卷

1. 给定一个长度不小于2的数组arr。 写一个函数调整arr,使arr中要么所有的偶数位上都是偶数,要么所有的奇数位上都是奇数上。 要求:如果数组长度为N,时间复杂度请达到O(N),额外空间复杂度请达到O(1),下标0,2,4,6...算作偶数位,下标1,3,5,7...算作奇数位,例如[1,2,3,4]调整为[2,1,4,3]即可

public class oddandEven {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int[] arr={1,4,6,2,7,89,3,2,3,5,4};
		oddinEven(arr);
	//	for(int i=0;i<arr.length;i++)
	for(int i:arr){
		System.out.println(i);
	}

	}
public static void oddinEven(int[] arr){
	int len=arr.length;
	int i=0;
	int j=1;
	while(i<len&&j<len){
		while(i<len&&arr[i]%2==0)
			i+=2;
		while(j<len&&arr[j]%2==1)
			j+=2;
		if(i<len&&j<len){
		//	swap(arr[i],arr[j]);
			int temp=arr[i];
			arr[i]=arr[j];
			arr[j]=temp;

	}
	}
}
	/*public static  void swap(int a,int b){
		int temp=a;
		a=b;
		b=temp;
	}*/
}

注意我源代码中注释掉的部分,原来交换数组两个值用的是swap方法,发现程序一运行就变成死循环了,原因在于swap方法根本就没有交换数组的两个值,于是我换成代码中的写法就对了。改程序思想和快速排序中的交换逆序的思想有点类似。

这里应该是值传递和引用传递的问题吧,

值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参 数的值。
引用传递:也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。
 
 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值