莫比乌斯反演 2021-12-19 15:24 采纳率: 100%
浏览 103
已结题

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素

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

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

  • 写回答

1条回答 默认 最新

  • 英雄哪里出来 2021年博客之星Top1 2021-12-19 15:30
    关注
    int swap(int *a, int *b) {
        int tmp = *a;
        *a = *b;
        *b = tmp;
        return tmp;
    }
    
    int removeElement(int* nums, int numsSize, int val){
        int i;
        for(i = 0; i < numsSize; ++i) {
            while(nums[i] == val) {                     // (1) 注意这里是 while,而不是 if
                swap(&nums[i], &nums[numsSize-1]);      // (2) 如果发现这个数是需要删除的,则和最后一个数交换 
                --numsSize;                             // (3) 最后那个数直接弹出不管了
                if(i >= numsSize) {                     // (4) 没有多余元素时,直接跳出循环
                    break;
                }
            }
        }
        return numsSize;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月27日
  • 已采纳回答 12月19日
  • 创建了问题 12月19日

悬赏问题

  • ¥15 asp.textbox后台赋值前端不能显示什么原因
  • ¥15 宇视监控服务器无法登录
  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥15 DruidDataSource一直closing
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误