#include <unordered_map> #include <vector> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型vector */ vector<int> FindNumsAppearOnce(vector<int>& nums) { // write code here int l = nums.size(); unordered_map<int, int> freqmap; for(int n:nums){ freqmap[n]++; } vector<int> res; for(auto itor:freqmap){ if(itor.second==1){ res.push_back(itor.first); } } sort(res.begin(),res.end()); return res; } };
使用hashmap遍历数组,这个和前一道题差不多,拿到后遍历一下,然后符合条件的值插入,对结果数组排序就行
这里的问题是:
对for的范围循环了解不深刻,gpt总结
## 根本原因
1. **迭代器模式**:
for(auto itor = map.begin(); itor != map.end(); ++itor)
- `itor` 是一个迭代器对象(`std::unordered_map<...>::iterator`)
- 迭代器需要解引用才能访问元素,因此使用 `->` 运算符
- 等价于 `(*itor).first`
2. **范围for循环模式**:
for(auto itor : map)
- `itor` 是map中的元素(`std::pair<const Key, Value>`)
- 直接是元素本身,不是指针/迭代器,因此使用 `.` 运算符
还是对范围循环的理解不够深刻