Leetcode第26题和第27题解题思路

一、题目描述

给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

示例:

给定 nums = [0,0,1,1,1,2,2,3,3,4],

函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。

你不需要考虑数组中超出新长度后面的元素。

二、解题思路

对于这道题,如果单独要求删除重复元素,我们可以将nums数组的元素放进set里,因为set集合里是不允许重复元素存在的,因此可以实现重复元素的删除。
但是本题要求不能使用额外的数据空间,并且空间复杂度为O(1),因此我们需要另外想办法
在这里,我们遍历数组元素,从back=0开始存放不重复的数组元素,若nums[back] 和遍历的nums[front]不相等,则将nums[front]写进修正后的数组中,最后返回数组的前back+1个元素
具体代码如下:

class Solution {
    public int removeDuplicates(int[] nums) {
        if (nums.length == 0) {
            return 0;
        }
        int back = 0;
        for (int front = 1; front < nums.length; front++) {
            if (nums[back] != nums[front]) {
                back++;
                nums[back] = nums[front];
            }
        }
        return back+1;
    }
}

Leetcode27题思路和26题相同:依次遍历数组,若数组元素和val不相等,写进nums的靠前元素中

class Solution {
    public int removeElement(int[] nums, int val) {
        if(nums.length==0){
            return 0;
        }
        int back = 0;
        for(int i=0;i<nums.length;i++){
            if(nums[i]!=val){
                nums[back++] = nums[i];
            }
        }
        return back; 
    }
}
发布了18 篇原创文章 · 获赞 0 · 访问量 377
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览