网站大全官网,网站建设公司如何转型,导购类网站建设多少钱,济南平面设计公司这个问题可以使用滑动窗口的方法来解决。我们可以使用两个指针#xff0c;一个指向子数组的开始#xff0c;一个指向子数组的结束。然后我们使用一个哈希表来记录每个元素最后出现的位置。当我们遇到一个已经在子数组中出现过的元素时#xff0c;我们就将开始指针移动到这个…
这个问题可以使用滑动窗口的方法来解决。我们可以使用两个指针一个指向子数组的开始一个指向子数组的结束。然后我们使用一个哈希表来记录每个元素最后出现的位置。当我们遇到一个已经在子数组中出现过的元素时我们就将开始指针移动到这个元素最后出现的位置的下一个位置。这样我们就可以保证子数组中的元素都是不重复的。然后我们每次更新子数组的长度最后得到的就是最长无重复元素子数组的长度。
以下是C代码实现
#include iostream
#include map
#include vector
using namespace std;int main() {int n;cin n;vectorint arr(n);for (int i 0; i n; i) {cin arr[i];}mapint, int lastPos;int start 0;int maxLength 0;for (int end 0; end n; end) {if (lastPos.count(arr[end]) lastPos[arr[end]] start) {start lastPos[arr[end]] 1;}lastPos[arr[end]] end;maxLength max(maxLength, end - start 1);}cout maxLength endl;return 0;
}
在这段代码中我们首先读取输入的n和arr然后初始化一个哈希表和两个指针。然后我们遍历整个数组对于每个元素我们检查它是否在子数组中出现过如果出现过我们就将开始指针移动到这个元素最后出现的位置的下一个位置。然后我们更新这个素在哈希表中的位置和子数组的长度。最后我们输出最长无重复元素子数组的长度。