JAVA合并两个有序数组并去除重复元素。

题目中说明是两个有序数组,就一个一个比较,第一个数组的第一个元素和第二个数组的第一个元素比较。小的插入到result数组中。若有重复的元素,则去其中一个。这个时候,相当于从两个数组中都取了一个元素,所以两个数组的下标都要后移,result的下标自然也要后移。

package com.algorithm;
/*
 * 合并两个有序数组,合并之后还是有序的  并且去除重复的。
 * */
public class MergeAndSortArray {

	public static void main(String[] args) {
		int [] num1=new int[]{1,3,5,6,7};
		int [] num2=new int[]{3,5,6,8};
		merge(num1, num2);
	}
	private static void merge(int [] num1,int [] num2){
		int[] result=new int[num1.length+num2.length];
		int i=0,j=0,k=0;//定义三个变量。i  j  k分别控制num1 num2  result三个数组的下标
		while(i<num1.length && j< num2.length){//两个数组都不为空的时候
			if(num1[i]<num2[j]){//若num1的元素小,加入result
				result[k]=num1[i];
				i++;//num1的下标后移
				k++;//result的下标后移
			}else if(num1[i]==num2[j]){//若二者相等 这一步就是去重复。
				result[k]=num1[i];//这里两个数组的元素把哪个加入result都行
				k++;//result下标后移
				i++;//这里要注意的是  两个重复了,去重之后,两个数组的下标都要后移
				j++;
			}else {
				result[k]=num2[j];//若num2的元素小,加入result
				k++;
				j++;
			}	
		}
		
		//若不要求去重。while循环应换成如下代码:
//		while(i<num1.length && j< num2.length){
//			if(num1[i]<=num2[j]){
//				result[k++]=num1[i++];
//			}else{
//				result[k++]=num2[j++];
//			}
//		}

		//下面是当其中一个数组元素全部添加到result了,另一个还没添加完  继续添加。
		while(i<num1.length){//
			result[k]=num1[i];
			i++;
			k++;
		}
		while(j<num2.length){
			result[k]=num2[j];
			j++;
			k++;
		}
		for (int num : result) {
			System.out.println(num);
		}
	}
	
}

也可以上来就考虑,一个数组的最小元素是不是大于另一个数组的最大元素,即先把一个数组的最后一个元素和另一个元素的第一个元素相比较。如果是这样子,那直接把两个数组依次加入result。这样就省去了一个比较大小那个while循环吧。最好情况。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值