我想首先说我是编程新手。我在c ++中从另一个列表中编写不同数字列表时遇到问题。假设我有一个列表l1 = {1, 12, 2, 4, 1, 3, 2}
,我想创建一个类似于l2 = {1, 12, 2, 4, 3}
的新列表......
这就是我写的:
#include <iostream>
using namespace std;
int main() {
int l1[100], l2[100], length, length1 = 0, i, j, a = 0;
cin >> length; //set the length
for (i = 0; i < length; i++) {
cin >> l1[i]; //add numbers to the list
}
l2[0] = l1[0]; //added the first number manually
for (i = 0; i < length; i++) {
length1++;
a = 0;
for (j = 0; j < length1; j++) {
if (l1[i] != l2[j]) //this checks numbers in the second list
a = 1; // and if they aren't found a gets the value
} //1 so after it's done checking if a is 1 it
if (a == 1) //will add the number to the list, but if the
l2[j] = l1[i]; //number is found then a is 0 and nothing happens,
} // SUPPOSEDLY
for (j = 0; j < length1; j++) {
cout << l2[j] << " ";
}
}
这个的输出是1 -858993460 12 2 4 1 3
所以显然我做了一些非常错误的事情。我欢迎您提出任何建议,我不一定需要解决这个问题,我只是想解开。
非常感谢您花时间回复此事。
答案 0 :(得分:3)
std::sort(l1, l1 + 100);
int* end_uniques = std::unique(l1, l1 + 100);
std::copy(l1, end_uniques, l2);
size_t num_uniques = end_uniques - l1;
这是O(N log N)而不是你的O(N ^ 2)解决方案,所以理论上更快。它需要首先对数组l1
进行排序(就地)以让std::unique
工作。然后你得到一个指向唯一元素末尾的指针,你可以用它来复制到l2
当然得到计数(因为当然它可能小于100的完整大小)。
答案 1 :(得分:0)
最重要:此解决方案假设我们要保留订单
渴求
尝试这个...... 我已经更改了一些标识符(当然这不会影响执行) 它只会帮助我们确定变量的用途。
这是代码
#include <iostream>
using namespace std;
int main()
{
int Input[100], Unique[100], InSize, UniLength = 0;
cin >> InSize;
for (int ii = 0 ; ii < InSize ; ii++ )
{
cin >> Input[ii];
}
Unique[0] = Input[0];
UniLength++;
bool IsUnique;
for ( int ii = 1 ; ii < InSize ; ii++ )
{
IsUnique=true;
for (int jj = 0 ; jj < UniLength ; jj++ )
{
if ( Input[ii] == Unique[jj] )
{
IsUnique=false;
break;
}
}
if ( IsUnique )
{
Unique[UniLength] = Input[ii];
UniLength++;
}
}
for ( int jj = 0 ; jj < UniLength ; jj++ )
{
cout << Unique[jj] << " ";
}
}
你在新数组中插入了原始索引的唯一元素.....并代替那些重复的元素....你没有做任何变换......即它们是未初始化的。 ....并且正在给出像-858993460
我很欣赏上面提到的两个答案,但是......我认为这个问题是针对hackerrank的......而且unqiue_array()
在那里不起作用.....
<强>加强>
当然我们只能在输入数组中添加Unique元素.....但是......这个解决方案有效......此外,我们有2秒的执行时间限制......只有100个元素。 ....记住...... Big Oh Notation对于非常大的输入效果很好....这里的情况并非如此......所以看时间复杂性真的没有意义.......我选择的算法很容易理解。
我希望这就是你要找的......
度过愉快的一天。