Leetcode018--删除数组中重复的元素

一、原题



  Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length. 
  Do not allocate extra space for another array, you must do this in place with constant memory. 
For example, 
  Given input array nums = [1,1,2]
  Your function should return length = 2, with the first two elements of nums being 1 and 2 respectively. It doesn’t matter   what you leave beyond the new length. 


一、中文


给定一个单链表,和一个分组数K,每K个结点进行反转,如果最后的结点数不足K个就保持原来的链接顺序不变。 



三、举例



  给定一个排序的数组,将数组中的重复元素去掉,相同的只保留一个,并且返回数组新的元素个数,不要创建一个新的数组来保存结果。在常量时间内解决这个问题 


四、思路



这里提供了两种思路,第一种是找到重复的元素之后,使后面的数组向前移动,这样效率是比较低的

第二种思路是,找到不相同的元素和该元素的下一个元素进行交换,这样比较快一点。


五、程序



package LeetCode19;

public class LeetCode019{
	
	//第一种方式,平移的方式,效率比较低
	public static int skipDupAry(int num[]){
		if(num == null || num.length < 1){
			return 0;
		}
		
		int value = 0;
		
		int length = num.length - 1;
		
		for(int i = 0; i < length; i++){
			int temp = num[i+1];
			
			//如果后一个元素和前一个元素相等
			if(temp == num[i]){
				//将后面的元素左移一个
				for(int j = i+1; j < length; j++){
					num[j] = num[j+1];
					if(j == length - 1){
						num[j+1] = 0;
					}
				}
				value++;
			}
		}
		//System.out.println("value = "+value);
		
		return num.length - value +1;
	}
	
	
	//第二种方式,通过元素交换的方式,效率高
    public static int removeDuplicates(int[] A) {

        if (A.length == 0) {
            return 0;
        }

        int index = 0;//[0,index]只记录数组中出现的按从小到大的唯一一个数,已经排好序了
        int next = 1;

        // 算法思想:找index之后的比A[index]大的数,如是找到就移动到A[index+1]处,
        // index移动到下一个位置,next移动到下一个位置,再找比A[index]大的数

        while (next < A.length) {
        	//当没有找到不重复的元素的时候,一直移动next
            while (next < A.length && A[index] == A[next] ) { // 找不等于数组中最
                next++;
            }

            //找到了不相同的元素了,将next的值赋值给index+1的位置
            if (next < A.length) {
                index++;
                A[index] = A[next];
                next++;
            }
        }
        return index + 1;
    }
	
	
	public static void main(String args[]){
		int num[] = new int[]{1, 2, 2, 3, 3, 4, 5};
		
		int k1 = skipDupAry(num);
		for(int i = 0; i < k1; i++){
			System.out.print(num[i]+" ");
		}
		
//		int k = removeDuplicates(num);
//		for(int i = 0; i < k; i++){
//			System.out.print(num[i]+" ");
//		}
		
		System.exit(0);
	}
	
}




已标记关键词 清除标记
相关推荐
<p> <b><span style="background-color:#FFE500;">【超实用课程内容】</span></b> </p> <p> <br /> </p> <p> <br /> </p> <p> 本课程内容包含讲解<span>解读Nginx的基础知识,</span><span>解读Nginx的核心知识、带领学员进行</span>高并发环境下的Nginx性能优化实战,让学生能够快速将所学融合到企业应用。 </p> <p> <br /> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b><br /> </b> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b><span style="background-color:#FFE500;">【课程如何观看?】</span></b> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> PC端:<a href="https://edu.csdn.net/course/detail/26277"><span id="__kindeditor_bookmark_start_21__"></span></a><a href="https://edu.csdn.net/course/detail/27216">https://edu.csdn.net/course/detail/27216</a> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 移动端:CSDN 学院APP(注意不是CSDN APP哦) </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 本课程为录播课,课程永久有效观看时长,大家可以抓紧时间学习后一起讨论哦~ </p> <p style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <br /> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <strong><span style="background-color:#FFE500;">【学员专享增值服务】</span></strong> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b>源码开放</b> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化 </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 下载方式:电脑登录<a href="https://edu.csdn.net/course/detail/26277"></a><a href="https://edu.csdn.net/course/detail/27216">https://edu.csdn.net/course/detail/27216</a>,播放页面右侧点击课件进行资料打包下载 </p> <p> <br /> </p> <p> <br /> </p> <p> <br /> </p>
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页