每日算法(十五)-java给定一个有序数组,删除其中重复元素,只保留一个,并返回新数组的长度

每日算法(十五)-java给定一个有序数组,删除其中重复元素,只保留一个,并返回新数组的长度

Example 2:

Given nums = [0,0,1,1,1,2,2,3,3,4],

Your function should return length = 5, with the first five elements of nums being modified to 0, 1, 2, 3, and 4 respectively.

常规方法一:
新建一个数组来放最后的结果,由于不知道大小,就先与原数组大小相同,然后直接遍历原数组,第一次遍历从第一个数开始,第二个遍历从第二个数开始依次往后,如果第一个数与第二个数相等,则将预先设定的boolean类型的值更改为false并跳出循环,判断boolean类型的值是否为ture,是则将该值放入结果数组中,最后数组里面放的就都是不重复的元素,但需要注意的是我们一开始设定的大小为和原数组相同,所以没有放入的则默认都会0;所以这里还需要再新建一个数组,将得到的结果数组复制到新数组,新数组的大小可以在判断那里初始一个值来计录次数,最后的次数则为新数组的大小,代码如下:

public class ArrrayLength {
	public static int[] returnLength(int arr[]){
		int t=0;
		int temparr[]=new int[arr.length];
		for(int i=0;i<arr.length;i++){
			boolean isture=true;
		  for(int j=i+1;j<arr.length;j++){
			if(arr[i]==arr[j]){      
				 isture=false;
				 break;
			}
		  }
			if(isture){
				temparr[t]=arr[i];
				t++;
			}
		}
		int newarr[]=new int[t];
		System.arraycopy(temparr, 0, newarr, 0, t);
		return newarr;
	}

第二种巧妙方式:
很容易想到链表的方式,利用其contains方法进行比较,不同则add放入链表,最终结果则为无重复的链表,最后再toarray遍历即可,toarray之前先新建一个数组大小了链表的size;代码如下:

public class ListLength {
public static List<Integer> returnList(int arr[]){
	List<Integer> list =new ArrayList<>();
	for(int i=0;i<arr.length;i++){
		if(!list.contains(arr[i])){
			list.add(arr[i]);
		}
	}
	return list;
}
public static void main(String[] args) {
	int arr[]={0,0,1,1,1,2,2,3,3,4};
	List<Integer> temp=returnList(arr);
	Object[] a=new Object [temp.size()];
	a=temp.toArray();
	for(int i=0;i<a.length;i++){
		System.out.println(a[i]);
	}

猜你喜欢

转载自blog.csdn.net/Tong_Nan/article/details/89955119