C++编译错误:type 'set<int>' does not provide a subscript operator 求助
问题排查与修复
编译错误原因
C++的set<int>是有序关联容器,底层基于红黑树实现,不属于随机访问容器,因此不支持通过[]下标运算符直接访问元素,这就是你遇到type 'set<int>' does not provide a subscript operator错误的原因。
修正后的代码
你可以通过迭代器遍历set,或者使用范围for循环来读取元素并重新填充到nums中:
class Solution { public: int removeDuplicates(vector<int>& nums) { set<int> s; for(int num : nums) { s.insert(num); } nums.clear(); // 使用迭代器遍历set for(auto it = s.begin(); it != s.end(); ++it) { nums.push_back(*it); } return s.size(); } };
或者用更简洁的写法直接利用容器迭代器初始化和赋值:
class Solution { public: int removeDuplicates(vector<int>& nums) { set<int> s(nums.begin(), nums.end()); nums.assign(s.begin(), s.end()); return s.size(); } };
额外优化提示
因为题目给出的是有序数组,其实不需要借助set,用双指针法可以达到O(n)时间复杂度且O(1)空间复杂度,更符合题目隐含的性能要求:
class Solution { public: int removeDuplicates(vector<int>& nums) { if(nums.empty()) return 0; int idx = 0; for(int i = 1; i < nums.size(); ++i) { if(nums[i] != nums[idx]) { nums[++idx] = nums[i]; } } return idx + 1; } };
内容的提问来源于stack exchange,提问作者Harsh Sonar
相关产品推荐
相关产品推荐

