博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[leetcode]26.Remove Duplicates from Sorted Array
阅读量:5099 次
发布时间:2019-06-13

本文共 1867 字,大约阅读时间需要 6 分钟。

题目

Given a sorted array nums, 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 by modifying the input array in-place with O(1) extra memory.

Example 1:

Given 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 returned length.

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.

It doesn't matter what values are set beyond the returned length.

解法

思路

这道题我自己的方法是非常暴力的方法,用了三个循环,然后意料之中地超时了。看了别人的解法,第一次学到了用快慢指针来解题,时间复杂度为O(n)。刚开始先让快慢指针都指向数组中的第一个元素,判断快慢指针指向的元素是否相等,如果相等,则快指针往前走一步,慢指针不动,如果不等,慢指针先走一步,然后把快指针所指元素的值赋给慢指针所指元素,然后快指针往前走一步。

这种方法在慢指针改变数组元素的同时,可以保证快指针对数组的遍历不受影响,非常巧妙。

代码

class Solution {    public int removeDuplicates(int[] nums) {        int len = nums.length;        int j = 0; //j为慢指针        if(len == 0) return 0;        for(int i = 0; i < len; i++) { //i为快指针            if(nums[i] != nums[j])                nums[++j] = nums[i];        }        return j+1;    }}

最后附上自己的暴力解法,仅供娱乐(逃

class Solution {    public int removeDuplicates(int[] nums) {        int removeNum = 0;        int len = nums.length;        if(nums[0] == nums[len-1])            return 1;        for(int i = 0; i < len-1; i++) {            if(nums[i] > nums[i+1])                break;            while(nums[i] == nums[i+1]) {                int temp = nums[i+1];                for(int j = i+2; j < len; j++){                    nums[i+1] = nums[i+2];                    nums[len-1] = temp;                }                removeNum ++;            }        }        return len - removeNum;    }}

转载于:https://www.cnblogs.com/shinjia/p/9722125.html

你可能感兴趣的文章
如何在g++中添加include文件的目录
查看>>
BlockingQueue深入解析
查看>>
网络编程
查看>>
POJ -2236 Wireless Network
查看>>
CentOS6.9安装Filebeat监控Nginx的访问日志发送到Kafka
查看>>
无向图求桥 UVA 796
查看>>
Nginx+Keepalived 实现双击热备及负载均衡
查看>>
五分钟搭建WordPress博客(二)
查看>>
Vue_(组件通讯)子组件向父组件传值
查看>>
jvm参数
查看>>
确认是否是因为做了物理I/O而导致的性能不佳
查看>>
Something-Summary
查看>>
Spring学习笔记
查看>>
6个有用的MySQL语句
查看>>
JMeter-生成性能测试结果报告
查看>>
linux c/c++ IP字符串转换成可比较大小的数字
查看>>
我对前端MVC的理解
查看>>
sql: table,view,function, procedure created MS_Description in sql server
查看>>
[网络流24题] 最长k可重区间集问题 (费用流)
查看>>
路径依赖理论
查看>>