• leetcode经典面试150题---2.移除元素


    目录

    题目描述

    前置知识

    代码

    方法一 双指针

    思路

    实现

    复杂度

    方法二  通用解法

    思路

    实现

    复杂度


    题目描述


    给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

    不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组

    元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

    示例 1:

    输入:nums = [3,2,2,3], val = 3
    输出:2, nums = [2,2]
    解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。

    示例 2:

    输入:nums = [0,1,2,2,3,0,4,2], val = 2
    输出:5, nums = [0,1,4,0,3]
    解释:函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。

    说明:

    请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

    前置知识


    • 双指针

    代码


    方法一 双指针

    思路

    • 我们可以将数组分成「前后」两段:
    • 前半段是有效部分,存储的是不等于 val 的元素。
    • 后半段是无效部分,存储的是等于 val 的元素。
    • 最终答案返回有效部分的结尾下标。

    实现

    1. class Solution {
    2. public int removeElement(int[] nums, int val) {
    3. int j = nums.length - 1;
    4. for (int i = 0; i <= j; i++) {
    5. if (nums[i] == val) {
    6. swap(nums, i--, j--);
    7. }
    8. }
    9. return j + 1;
    10. }
    11. void swap(int[] nums, int i, int j) {
    12. int tmp = nums[i];
    13. nums[i] = nums[j];
    14. nums[j] = tmp;
    15. }
    16. }

    复杂度

    • 时间复杂度:O(n)
    • 空间复杂度:O(1)

    方法二  通用解法

    思路

    • 先设定变量 idx,指向待插入位置。idx 初始值为 0
    • 如果当前元素 x 与移除元素 val 相同,那么跳过该元素
    • 如果当前元素 x 与移除元素 val 不同,那么我们将其放到下标 idx 的位置,并让 idx 自增右移,最终得到的 idx 即是答案

    实现

    1. class Solution {
    2. public int removeElement(int[] nums, int val) {
    3. int idx = 0;
    4. for (int x : nums) {
    5. if (x != val) nums[idx++] = x;
    6. }
    7. return idx;
    8. }
    9. }

    复杂度

    • 时间复杂度:O(n)
    • 空间复杂度:O(1)
  • 相关阅读:
    博途PLC面向对象编程之批量调用实例化对象FB
    云ES容灾方案
    vue编写分页组件
    04 Opencv图像操作
    设计模式笔记
    1763. 最长的美好子字符串-贪心算法
    【博学谷学习记录】超强总结,用心分享|架构师-Netty核心组件
    数据结构:lambda表达式
    i.MX 6ULL 驱动开发 二:搭建 KGDB 调试 linux 内核和驱动环境
    常见服务知识点罗列--haproxy/keepalived
  • 原文地址:https://blog.csdn.net/lxd8731247769/article/details/134001327