gpt4 book ai didi

c++ - vector -首先出现k值

转载 作者:行者123 更新时间:2023-12-02 10:19:58 26 4
gpt4 key购买 nike

这是我的第一篇文章,希望我没有做错任何事情。
我正在尝试编写一个程序,在其中找到达到k出现的 vector 的第一个值。

例如,给定此 vector 且k = 3:

1 1 2 3 4 4 2 2 1 3

我将2作为输出,因为2是到达第3次出现的第一个数字。

以下代码是我尝试运行的代码,但是输出不正确。

    #include<iostream>
#include<vector>

using namespace std;

int main()
{

vector<int> vettore;
int k;
int a,b,i;
int occ_a;
int occ_b;

cout<< "Write values of vector (number 0 ends the input of values)\n";
int ins;
cin>>ins;
while(ins)
{
vettore.push_back(ins); //Elements insertion
cin>>ins;
}
cout<<"how many occurrences?\n"<<endl;;
cin>>k;
if(k>0)
{
int i=0;
b = vettore[0];
occ_b=0;

while(i< vettore.size())
{

int j=i;
occ_a = 0;
a = vettore[i];
while(occ_a < k && j<vettore.size())
{
if(vettore[j]== a)
{
occ_a++;
vettore.erase(vettore.begin() + j);
}
else
j++;
}
if(b!=a && occ_b < occ_a)
b = a;
i++;

}
cout << b; //b is the value that reached k-occurrences first
}
return 0;
}

时间已经过去了,但我无法解决。

谢谢您的帮助!

最佳答案

您的代码很难阅读,因为您在不使用变量的地方声明了变量。因此它们的含义很难理解。

同样,也不需要从 vector 中删除元素。找到第一个出现k次的值并不等同于更改 vector 。它们是两个不同的任务。

我可以建议下面的演示程序中显示以下解决方案。

#include <iostream>
#include <vector>

int main()
{
std::vector<int> v = { 1, 1, 2, 3, 4, 4, 2, 2, 1, 3 };
size_t least_last = v.size();
size_t k = 3;

for ( size_t i = 0; i + k <= least_last; i++ )
{
size_t count = 1;
size_t j = i;

while ( count < k && ++j < least_last )
{
if ( v[j] == v[i] ) ++count;
}

if ( count == k )
{
least_last = j;
}
}

if ( least_last != v.size() ) std::cout << v[least_last] << '\n';

return 0;
}.

程序输出为
2

这个想法是找到出现k次的第一个元素的最后位置。一旦发现遍历序列的上限,就将该值设置为该值。因此,如果在此限制之前k次出现另一个元素,则意味着与已找到的元素相比,它是第一个出现。

关于c++ - vector -首先出现k值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60662021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com