LeetCode27:移除元素

简介: LeetCode27:移除元素

LeetCode27:移除元素,超详细,易懂

题目描述

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

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

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


示例 1:

给定 nums = [3,2,2,3], val = 3,

函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。

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


示例 2:

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

函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。

注意这五个元素可为任意顺序。

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


解题方法

1.用到的方法removeElement(int[] nums, int val)

removeElement:删除元素

val 表示需要删除的元素

2.用到的方法,利用双指针,来进行判断

2.1 思想(双指针)

左右两指针交换值,一个是所去值,另一个是一般值,将两者交换位置,最后使所有一般值排到前面,其位置还是原来的位置,数组长度变短,输出新的数组即可

2.2 语言描述:

在数组的开头和结尾分别建立一个指针,可以先运行左指针,然后再运行右指针。左指针判断其所在索引的值是否与val相同,若相同,则静止不动,若不相同,则向右移动一位,直到相同静止不动。右指针得找!=val的值,然后与左指针交换值,

因为l是从0开始,所以最后如果nums[l]==val的话,输出l即可,不相等的话,就使l+1


代码实现

class Solution {
    public int removeElement(int[] nums, int val) {
        if(nums.length == 0 || nums == null) {
            return 0;
        }
        int temp =0;
        int l =0;
        int r = nums.length-1;
        while(l<r) {
            while(l<r && nums[l] != val) {
                l+=1;
            }
            while(l<r && nums[r]  == val) {
                r-=1;
            }
            temp = nums[r];
            nums[r] = nums[l];
            nums[l] = temp;
        }
        return nums[l] == val?l:l+1;
    }
}


相关文章
|
21天前
|
算法
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
|
2天前
2670.找出不同元素数目差数组-力扣(LeetCode)
2670.找出不同元素数目差数组-力扣(LeetCode)
4 0
|
29天前
|
算法 搜索推荐 Java
【经典算法】LeetCode 215. 数组中的第K个最大元素(Java/C/Python3实现含注释说明,Medium)
【经典算法】LeetCode 215. 数组中的第K个最大元素(Java/C/Python3实现含注释说明,Medium)
16 3
|
6天前
|
存储 算法 Java
力扣经典150题第四十五题:存在重复元素 II
力扣经典150题第四十五题:存在重复元素 II
5 0
|
15天前
|
索引
leetcode题解:27.移除元素
leetcode题解:27.移除元素
14 0
|
2月前
题目----力扣--移除链表元素
题目----力扣--移除链表元素
24 1
|
2月前
|
存储 算法 索引
【力扣刷题】只出现一次的数字、多数元素、环形链表 II、两数相加
【力扣刷题】只出现一次的数字、多数元素、环形链表 II、两数相加
32 1
|
2月前
|
人工智能
力扣100114. 元素和最小的山形三元组 II(中等)
力扣100114. 元素和最小的山形三元组 II(中等)
|
24天前
|
存储 SQL 算法
LeetCode 83题:删除排序链表中的重复元素【面试】
LeetCode 83题:删除排序链表中的重复元素【面试】
|
24天前
|
存储 SQL 算法
LeetCode 题目 82:删除排序链表中的重复元素 II
LeetCode 题目 82:删除排序链表中的重复元素 II