在leetcode做一道简单的算法题,自己解决了问题。但是阅读最快的那一段代码,同样是一个循环,但是时间复杂度怎么差了10倍左右?
time:0ms
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int fast=0,slow=0;
for(int i=0;i<nums.size();++i)
{
if(nums[fast]==val)
{
fast++;
}
else
{
nums[slow] = nums[fast];
slow ++;
fast ++;
}
}
return slow;
}
};
time:8ms
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int i=0;
for(unsigned int j=0;j!=nums.size();++j){
if(nums[j]!=val)
nums[i++]=nums[j];
}
return i;
}
};
我觉得没必要纠结这么多,反正时间复杂度都是 O(n),Leetcode 测试时间可能也不准确
我觉得是不是将代码转成汇编再详细分析对比两者的差别,或许有寄存器的使用等缓存技术。
没事,至少你的代码体积小