同程笔试 同程秋招 同程笔试题 0925

笔试时间:2025年5月4日

往年笔试合集:

2023春招秋招笔试合集

2024春招秋招笔试合集

第一题:移除数组中指定的元素

题目描述: 给你一个数组和一个值,原地移除所有数值等于该值的元素,并返回移除后数组的新长度。要求不使用额外的数组空间,必须仅使用 O(1) 额外空间并原地修改输入数组。

输入描述

一个整数数组和一个需要移除的目标值

输出描述

移除指定元素后数组的新长度

样例输入

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

样例输出

2

参考题解

解题思路:使用"快慢指针"的思想来解决问题:

  1. 设置一个慢指针 position,它指向下一个应该存放非目标元素的位置
  2. 设置一个快指针 iterator,它负责遍历整个数组
  3. 当快指针指向的元素不是要移除的值时,就将该元素复制到慢指针所在的位置,然后慢指针向后移动一位
  4. 如果快指针指向的元素是要移除的值,则快指针继续向后移动,而慢指针保持不动
  5. 遍历结束后,慢指针 position 的值就是数组中非目标元素的数量

C++:

class Solution {
public:
    int removeElement(vector<int>& data, int valueToRemove) {
        int position = 0;
        for (int iterator = 0; iterator < data.size(); iterator++) {
            if (data[iterator] != valueToRemove) {
                data[position] = data[iterator];
                position++;
            }
        }
        return position;
    }
};

Java:

class Solution {
    public int removeElement(int[] data, int valueToRemove) {
        int position = 0;
        for (int iterator = 0; iterator < data.length; iterator++) {
            if (data[iterator] != valueToRemove) {
                data[position] = data[iterator];
                position++;
            }
        }
        return position;
    }
}

Python:

class Solution:
    def removeElement(self, data: List[int], valueToRemove: int) -> int:
        position = 0
        for iterator in range(len(data)):
            if data[iterator] != valueToRemove:
                data[position] = data[iterator]
                position += 1
        return position

第二题:删除子文件夹

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2025 春招笔试合集 文章被收录于专栏

2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务