我正在嘗試解決一個編碼問題,我要檢查一個向量是否具有唯一值,如果有,則回傳 true,否則回傳 false。
到目前為止,我想過使用嵌套回圈,您可以將第一個回圈與最后一個回圈進行比較,但我想知道 C 是否還有其他內容,然后進行 ao(n^2) 型別迭代。我看到 c 有一個獨特的功能,但這會洗掉唯一的值。
示例 1:
輸入:nums = [1,2,3,1] 輸出:true 示例 2:
輸入:nums = [1,2,3,4] 輸出:false
uj5u.com熱心網友回復:
std::unique檢查連續重復并將它們移動到范圍的末尾。它不會將它們從向量中洗掉。無論如何,您可以制作副本。它還將一個迭代器回傳到唯一值范圍的末尾(現在位于向量的前面):
#include <iostream>
#include <vector>
#include <algorithm>
bool only_unique(std::vector<int> v) {
std::sort(v.begin(),v.end());
return std::unique(v.begin(),v.end()) == v.end();
}
int main(){
std::cout << only_unique({1,2,3,1});
std::cout << only_unique({1,2,3,4});
}
如果您不想使用額外的記憶體,您可以將引數更改為參考。目前,only_unique保持引數不變。即使向量通過參考傳遞,重復項仍然存在(只是在不同的位置)。這具有O(n log n)復雜性。
uj5u.com熱心網友回復:
您需要創建“集合”結構,它可以從向量中插入值并且不插入重復項,因此您可以檢查集合的大小和向量是否匹配。
set<int> st;
for (auto i : nums)
st.insert(i);
return st.size() == nums.size();
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/438472.html
上一篇:如何在回圈定義中使用引數
