数组a={2,3,8,15}和数组b={1,3,20,21,23}, * 数组a和数组b都是升序排列的, * 放到数组c中没能有重复,不能使用任何库函数


import java.util.Arrays;
/**
 * 1.数组a={2,3,8,15}和数组b={1,3,20,21,23},
 * 数组a和数组b都是升序排列的,
 * 放到数组c中没能有重复,不能使用任何库函数,
 * 除println,print
 * 最简洁的代码实现。
 * 2.实现Arrays类的copyOf方法和toString方法,
 * 必须使用StringBuilder。
 *
 */
public class arrayshu {
public static void main(String[] args) {
//创建三个数组
int[] a={2,3,8,15};
int[] b={1,3,20,21,23};
int[] c=new int[a.length+b.length];
int m=0,n=0;
//c数组中重复的个数
int len=0;
//遍历c数组
for(int i=0;i<c.length;i++){
//临时越界条件
boolean flag=m<a.length&&n<b.length;
//满足非越界条件
if(flag&&a[m]<=b[n]){
//不管小于等于都赋值给c数组,并a数组下标加一
c[i]=a[m++];
//判断相等的情况
if(b[n]==c[i]){
//c数组中重复的个数加一
len++;
//b数组下标加一
n++;
}
}//已下部分已优化被注释
/*else if(flag&&a[m]==b[n]){
c[i]=a[m++];
n++;
}*/else{
//数组b没有遍历完,则给a数组赋值
if(n<b.length){
c[i]=b[n++];
}//if else if达到互斥效果,原理同上。
else if(m<a.length){
c[i]=a[m++];
}
}
}
System.out.println(toString(copyOf(c,len)));
}
/**
* Arrays.toString(arr)
* @param arr
* @return
*/
public static String toString(int[] arr) {
StringBuilder str=new StringBuilder("");
str.append("[");
for(int i=0;i<arr.length;i++){
if(i<arr.length-1){
str.append(arr[i]+",");
}else{
str.append(arr[i]);
}
}
str.append("]");
return str.toString();
}
/**
* //Arrays.copyOf(c,len)
* @param arr
* @param len
* @return
*/
public static int[] copyOf(int[] arr,int len) {
if(len<0||len>arr.length){
throw new IndexOutOfBoundsException();
}
int[] arrtemp=new int[arr.length-len];
for(int i=0;i<arrtemp.length;i++){
arrtemp[i]=arr[i];
}
return arrtemp;
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值