27. 移除元素

题目描述

给定一个数组 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。

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

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

题意

根据题目所说,不需要考虑数组中超出新长度后面的元素,且元素顺序可以改变。

也就是说,返回值为x的话,那么nums数组中下标为x以及x之后的元素可以为任意数字;又因为前x个的顺序可以不用参照在原数组中的先后顺序。

自然而然想到的一个算法是:

1. 将nums数组从小到大排序

2. 从后往前遍历,判断当前位置与需要删除的值val的大小,以对原数组修改,详细算法看代码

代码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
// 不需要考虑数组中超出新长度后面的元素,且元素顺序可以改变,
class Solution
{
public:
    int removeElement(vector<int>& nums, int val) {
        if (nums.size() == 0)
            return 0;
        // 排序
        sort(nums.begin(), nums.end());

        // tail记录nums的最后一个元素下标
        int tail = nums.size() - 1;
        for(int i = tail; i >= 0; i--)
        {
            // 如果末尾恰好是要删除的val,将末尾下标往前移动
            if(i == tail && nums[i] == val)
            {
                tail--;
                continue;
            }

            // 如果当前值比val小,说明所有的val已经清空,可以退出程序
            if(nums[i] < val)
                break;
            // 如果当前值比val大,继续往前找
            else if(nums[i] > val)
                ;
            // 如果当前值和val相等,将其删除,办法是将该区域的值以末尾填充区域
            else
            {
                nums[i] = nums[tail];
                tail--;
            }
        }
        return tail + 1;
    }
};

int main()
{
    vector<int> vec = {0,1,2,2,3,0,4,2};
    Solution s;
    int size =  s.removeElement(vec, 2);
    for(int i = 0; i < size; i++)
        cout << vec[i] << ‘ ‘;
    cout << endl << size << ‘\n‘;
    return 0;
}

原文地址:https://www.cnblogs.com/shayue/p/10317121.html

时间: 2024-11-09 09:29:58

27. 移除元素的相关文章

图解双指针 | LeetCode 27. 移除元素

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

python刷LeetCode:27. 移除元素

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

【LeetCode】27.移除元素

class Solution { public: int removeElement(vector<int>& nums, int val) { if(nums.empty()) return 0; int l=0; int r=nums.size()-1; while(l<r){ if(nums[l]==val) { while(l<r&&nums[r]==val) { r--; if(l==r) break; } swap(nums[l],nums[r]

leetcode 27. 移除元素 【时间击败100.00%】【内存击败84.67%】

1 public int removeElement(int[] nums, int val) { 2 int last = nums.length - 1; 3 for (int i = 0; i <= last && last >= 0; i++) { 4 while (last >= 0 && nums[last] == val) last--; 5 if (last >= 0 && i < last &&

Leecode刷题之旅-C语言/python-26.移除元素

/* * @lc app=leetcode.cn id=27 lang=c * * [27] 移除元素 * * https://leetcode-cn.com/problems/remove-element/description/ * * algorithms * Easy (53.46%) * Total Accepted: 39.5K * Total Submissions: 73.7K * Testcase Example: '[3,2,2,3]\n3' * * 给定一个数组 nums 

LeetCode#27 | Remove Element 移除元素

一.题目 Given an array and a value, remove all instances of that value in-place and return the new length. Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory. The order of element

将链表中的所有元素为奇数的节点移到元素为偶数节点的前面,并保证奇数之间顺序不变,偶数之间顺序不变。

2.将链表中的所有元素为奇数的节点移到元素为偶数节点的前面,并保证奇数之间顺序不变,偶数之间顺序不变. 示例: 交换前链表的顺序             交换后链表的顺序 4→5→3→1→2   ==>  5→3→1→4→2 1 ==> 1                   (链表仅含一个元素) 2→1 ==>1→2 ==>         (链表为空) C/C++: 链表节点定义为: struct node { struct node *next; int value; };

鼠标移到元素上指针变为不可用状态

鼠标移到元素上指针变为不可用状态:鼠标的指针状态与很多种,分别代表着不同的含义,下面介绍一下如何实现当鼠标悬浮于一个元素的时候,鼠标指针会变味不可用状态,代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" />

14.使用unbind()方法移除元素绑定的事件

unbind()方法可以移除元素已绑定的事件,它的调用格式如下: $(selector).unbind(event,fun) 其中参数event表示需要移除的事件名称,多个事件名用空格隔开,fun参数为事件执行时调用的函数名称. 例如,点击按钮时,使用unbind()方法移除<div>元素中已绑定的“dblclick”事件,如下图所示: 在浏览器中显示的效果: 从图中可以看出,当使用unbind()方法移除已绑定的“dblclick”事件时,再次双击<div>元素,样式和文字都没有