刚接触算法,不太会这样的结果返回
谢谢回答
#include
using namespace std;
struct samequeue
{
int data[100];
int sum = 0;
int firstcount = 0;
int lastcount = 0;
};
const int arr[] = {5,7,3,3,3,9,14,4,11,5,5,4,14,14,8};
const int k = 25;
//检查是否为K
void checkIsK(samequeue &sq)
{
if (sq.sum == k)
{
cout << "起始位置:" << sq.firstcount << "\t"
<< "终止位置:" << sq.lastcount << "\t"
<< "子序列:"; for (int j = sq.firstcount; j <= sq.lastcount; ++j) cout << arr[j] << ",";
cout << "和:" << sq.sum << endl;
}
}
int main()
{
samequeue sq;
for (int i = 0; i {
sq.data[sq.lastcount] = arr[i];
sq.sum = sq.sum + arr[i];
while(sq.sum >= k)
{
checkIsK(sq);
sq.sum = sq.sum - sq.data[sq.firstcount];
sq.firstcount++;
}
sq.lastcount++;
}
getchar();
return true;
}
目前能 想到的就是两层循环遍历,时间复杂度为n2,显然不太好。
用链表返回,
struct res{
uint32_t start;
uint32_t end;
uint32_t K;
uint32_t len;
uint32_t * res;
struct res * next;
};
或者使用写入文件(字符串)的方式返回
比如,定义文件格式
起始位置,终止位置,数字,数字,数字,...,K
每一行表示一个结果