• [LeetCode] 26. 删除排序数组中的重复项


    题目链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/

    题目描述:

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

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

    示例:

    示例 1:

    给定数组 nums = [1,1,2], 
    
    函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 
    
    你不需要考虑数组中超出新长度后面的元素。
    

    示例 2:

    给定 nums = [0,0,1,1,1,2,2,3,3,4],
    
    函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。
    
    你不需要考虑数组中超出新长度后面的元素。
    

    思路:

    因为nums是排好训的,

    我们用快慢指针,快指针指向重复数字的最后一个,慢指针指向要和快指针交换数字的位置.

    时间复杂度: (O(n));

    空间复杂度:(O(1))


    关注我的知乎专栏,了解更多解题技巧!我们一起进步.

    代码:

    python

    class Solution:
        def removeDuplicates(self, nums: List[int]) -> int:
            slow = 0
            fast = 0
            n = len(nums)
            while fast < n:
                while fast < n - 1 and nums[fast] == nums[fast+1]:
                    fast += 1
                nums[slow] = nums[fast]
                slow += 1
                fast += 1
            return slow 
    

    java

    class Solution {
        public int removeDuplicates(int[] nums) {
            int n = nums.length;
            int slow = 0;
            int fast = 0;
            while (fast < n) {
                while (fast < n - 1 && nums[fast] == nums[fast + 1]) fast++;
                nums[slow++] = nums[fast++];
            }
            return slow;
             
        }
    }
    
  • 相关阅读:
    Struts2 xml表单验证
    struts2表单验证-整合国际化
    Strut2-Ajax总结
    java中的线性安全和不安全
    智游推送试用
    推送的重连策略
    Android本地通知的实现方式
    MyBatis框架学习二
    Java基础学习 2 (选择结构,循环结构)
    Java基础学习 1 (变量,数据类型,运算符)
  • 原文地址:https://www.cnblogs.com/powercai/p/10791735.html
Copyright © 2020-2023  润新知