use*_*143 5 c++ arrays for-loop numbers
好吧,我必须找到数组中有多少个不同的数字.
例如,如果数组是:1 9 4 5 8 3 1 3 5
输出应为6,因为1,9,4,5,8,3是唯一的,1,3,5是重复的(不是唯一的).
所以,这是我的代码到目前为止.....没有正常思考.
#include <iostream>
using namespace std;
int main() {
int r = 0, a[50], n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
for (int j = 0; j < n; j++) {
for (int k = 0; k < j; k++) {
if (a[k] != a[j]) r++;
}
}
cout << r << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Bra*_*vic 12
让我参加聚会;)
您还可以使用哈希表:
#include <unordered_set>
#include <iostream>
int main() {
int a[] = { 1, 9, 4, 5, 8, 3, 1, 3, 5 };
const size_t len = sizeof(a) / sizeof(a[0]);
std::unordered_set<int> s(a, a + len);
std::cout << s.size() << std::endl;
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
这并不重要,但这可能是大型阵列的最佳性能.
如果最小和最大元素之间的差异相当小,那么你可以做得更快:
vector<bool>跨越min和max元素之间的范围(如果你在编译时知道数组元素,我建议std::bitset改为,但是你可以使用模板元编程计算编译时的所有内容).vector<bool>.trues 数vector<bool>.A std::set只包含唯一元素.
#include <set>
int main()
{
int a[] = { 1, 9, 4, 5, 8, 3, 1, 3, 5 };
std::set<int> sa(a, a + 9);
std::cout << sa.size() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
这个怎么样?
#include <list>
int main()
{
int a[] = {1, 9, 4, 5, 8, 3, 1, 3, 5};
std::list<int> la(a, a+9);
la.sort();
la.unique();
std::cout << la.size() << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44109 次 |
| 最近记录: |