所以,我在这里面临疑问.
我正在读"Cracking the coding Interview"一书.以下文字写在那里.
假设您有一个链表a1->a2....->an->b1->b2....bn,并且想要将其重新排列a1->b1->a2->b2->.....an->bn.你不知道链表的长度,但你知道的是它是一个偶数.
(这里两个链表长度相同)
对于p2所做的每一次移动,你可以有一个指针p1(快速指针)每两个元素移动一次.当p1命中链表的末尾时,p2将位于端点.然后,将p1移回前面并开始"编织"元素.在每次迭代时,p2选择一个元素并在p1之后插入它.
我不明白当p1到达链表的末尾时,p2将处于中点.如果n = 3(长度= 6),这就是我想象的方式.下面的每个步骤代表一次迭代.
1. a1 (p1, p2)->a2->a3->b1->b2->b3
2. a1->a2 (p2)->a3 (p1)->b1->b2->b3
3. a1->a2->a3 (p2)->b1->b2 (p1)->b3
4. Index out of bounds error because p2 now points to a node after b3.
Run Code Online (Sandbox Code Playgroud)
我错了吗?
bool comp(const pair<int, int>& a, const pair<int,int>& b){
if (v[a.first]>v[b.first]) {
return true;
}
else if(v[a.first] == v[b.first] && a.second < b.second){
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
所以,我正在通过一个代码,我遇到了这个比较器函数,用于排序对的向量.现在,我对C++很新.我试着阅读关于这个比较器如何工作的其他问题?但我无法理解.为什么返回类型是bool?返回值true意味着什么?
如果我有一个浮动向量为{1.2,1.2,1.2,1.3,1.4}并且我必须找出独特元素的数量,我该怎么办呢?
我是C++的新手,我真的不知道如何使用迭代器.谢谢!
编辑:我做了这样的事情:
sort(arra.begin(),arra.end());
vector <float>::iterator it = arra.begin();
while ( it != arra.end() )
{
temp1 = *it;
cout<<temp1<<"\n";
it++;
while (*it == temp1)
{
it++;
cout<<*it<<"\n";
}
count++;
}
Run Code Online (Sandbox Code Playgroud)
但这给了WA.