leetcode第27题:移除指定元素

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

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

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

思路如下:

既然问题要求我们就地删除给定值的所有元素,我们就必须用 O(1)O(1) 的额外空间来处理它。如何解决?我们可以保留两个指针 ii 和 jj,其中 ii是慢指针,jj 是快指针。

当 nums[j]nums[j] 与给定的值相等时,递增 jj 以跳过该元素。只要 nums[j] \neq valnums[j]??=val,我们就复制 nums[j]nums[j] 到 nums[i]nums[i] 并同时递增两个索引。重复这一过程,直到 jj 到达数组的末尾,该数组的新长度为 ii。

代码如下:

public int removeElement(int[] nums, int val) {
    int i = 0;
    for (int j = 0; j < nums.length; j++) {
        if (nums[j] != val) {
            nums[i] = nums[j];
            i++;
        }
    }
    return i;
}

原文地址:https://www.cnblogs.com/tsdblogs/p/10105290.html

时间: 2024-08-29 14:15:12

leetcode第27题:移除指定元素的相关文章

LeetCode第二十七题-删除数组指定元素

Remove Element 问题简介:给定数组nums和值val,在适当位置删除该值的所有实例并返回新长度. 不要为另一个数组分配额外的空间,必须通过使用O(1)额外内存修改输入数组来实现此目的. 举例: 1.给定数组 = [3,2,2,3], val = 3, 返回值为2,代表有两个不等于val的值,此时数组前两个值应为[2,2] 2: 给定数组 = [0,1,2,2,3,0,4,2], val = 2, 返回值为5,代表有五个不等于val的值,此时数组前两个值应为[0,1,3,0,4] 解

leetcode第27题:删除vector数组的元素(array)

题目: Given an array and a value, remove all instances of that value in place and return the new length. The order of elements can be changed. It doesn't matter what you leave beyond the new length. 这个比较简单,掌握vector的用法即可. 1 int removeElement(vector<int>

leetcode第27题--Implement strStr()

Implement strStr(). Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack. 就是判断haystack中是否有needle,如果包含的话,返回第一次包含的地址.如果没有则返回NULL. 这题官网打出来的是easy,但是要做好绝不简单.我能想到的就是O(m*n)的复杂度了.最经典的是用KMP算法. class Soluti

jQuery移除指定元素后的所有元素

jQuery 遍历的nextAll() 方法可以搜索 DOM 树中的元素跟随的同胞元素,也就是一个元素后面的所有同级元素,删除可以使用方法remove(),所以连起来为 $(selector).nextAll(“条件”).remove(); 下面给出实例演示:点击按钮后,删除被选项目之后的所有选项 创建Html元素 <div class="box"> <span>点击按钮后,删除被选项目之后的所有选项.</span><br> <di

leetcode第27题-Remove Element

#include<stdio.h> #include<stdlib.h> int removeElement(int A[], int n, int elem) { if(n==0) return 0; int len=n; for(int i=0,pos=0;i<n;i++) { if(A[i]==elem) len--; else A[pos++]=A[i]; } return len; } int main() { int n; while(scanf("%d

移除与指定元素相同的元素

移除与指定元素相同的元素  问题 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度.不要使用额外的数组空间,必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成.元素的顺序可以改变.不需要考虑数组中超出新长度后面的元素. 示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2. 不需要考虑数组中超出新长度后面的元素. 示例 2: 给定 nums

[LeetCode] Remove Linked List Elements 移除链表元素

Remove all elements from a linked list of integers that have value val. Example Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6 Return: 1 --> 2 --> 3 --> 4 --> 5 Credits:Special thanks to @mithmatt for adding this probl

[LeetCode]13. Remove Element移除元素

Given an array and a value, remove all instances of that value in place and return the new length. The order of elements can be changed. It doesn't matter what you leave beyond the new length. 解法1:先遍历数组统计出数组中含有多少个指定元素,然后遍历数组,从头开始找第一个出现指定值的位置,从尾开始找第一个

3. 无重复字符的最长子串 141. 环形链表 171. Excel表列序号 203. 移除链表元素

3. 无重复字符的最长子串 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3.示例 2: 输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1.示例 3: 输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "