数组中找有多少个k
发布于 2022-06-02 09:14
问题描述:给你一个数组,有n个数,在这里找,有多少个k?
算法描述:假设数组左右区间,比k小的放入左区间,比k大的放入右区间,直到左边到右区间结束。
#include <bits\stdc++.h>
using namespace std;
int n,k,a[1010];
void pri() //调试观察每次处理数据变化
{
for(int i =1;i<=n;i++)
cout<<a[i]<<" ";
cout<<endl;
system("pause");
}
int solv(int l,int r)//查找1到n区间有几个k;
{
int less = l-1,big = r+1;
//小于k的区间在最左边,大于k的区间在最右边,开始都没有哦!
while( l < big)
{
if(a[l] < k) swap(a[++less],a[l++]);//放入最小区域
else
{
if(a[l] > k) swap(a[--big],a[l]);//放入最大区域
else l++; //相等,指向下一个数
}
pri();//调试观察每次处理数据变化
}
return big - less-1;
}
void init()
{
srand(time(NULL));
cin>>n;
for(int i = 1;i<=n;i++)
a[i]= rand()%10 +1,cout<<a[i]<<" ";
cout<<endl;
cin>>k;
printf("find how much:%d\n",k);
}
int main()
{
init();
cout<<solv(1,n)<<endl; //查找1到n区间有几个k;
return 0;
}
本文来自网络或网友投稿,如有侵犯您的权益,请发邮件至:aisoutu@outlook.com 我们将第一时间删除。
相关素材