You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode中for循环用.size()超时问题及.size()实现复杂度问询

关于LeetCode移除元素题中vector.size()的性能疑问

我在解决LeetCode 27题(移除元素)时发现了特殊的计时行为:

给定整数数组nums和整数val,原地移除nums中所有val的实例,元素顺序可更改,返回nums中不等于val的元素数量。设nums中不等于val的元素数量为k,需满足:

  • 修改nums,使前k个元素为不等于val的元素,剩余元素及数组大小无关紧要。
  • 返回k。

提交以下代码时出现超时:

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int count=0;
        for(int i=0;i<nums.size();i++){
            if(nums[i]==val){
                for(int j=i;j+1<nums.size();j++){
                    nums[j]=nums[j+1];
                    count+=1;
                }
                i--;
            }
        }
        return nums.size()-count;
    }
};

随后我改用变量记录nums.size()的值作为循环条件,代码在规定时间内完成运行:

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int count=0,size=nums.size();
        for(int i=0;i<size;i++){
            if(nums[i]==val){
                for(int j=i;j+1<size;j++){
                    nums[j]=nums[j+1];
                    count+=1;
                }
                i--;
                size--;
            }
        }
        return size;
    }
};

我不理解为何两种写法有如此大的差异,想了解.size()的耗时、内部实现代码及其时间复杂度。

内容的提问来源于stack exchange,提问作者Charlie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 03:42:39