搜狗第三题,吃糖
双端队列做的,感觉写的很一般,有大佬分享一下写的么?
#include<iostream>
#include<deque>
using namespace std;
int func(int* a, int length)
{
deque<int> s;
int max = 0;
for (int i = 1; i < length; i++)
{
if (a[i] > a[max])
max = i;
}
for (int i = 0; i <= max; i++)
s.push_back(a[i]);
for (int j = length - 1; j > max; j--)
s.push_front(a[j]);
int sum1 = 0;
int sum2 = 0;
while (!s.empty())
{
int num1 = s[0];
int num2 = s[length - 1];
if (num1 > num2)
{
sum1 = sum1 + num1;
s.pop_front();
}
else
{
sum1 = sum1 + num2;
s.pop_back();
}
length = s.size();
if (length > 0)
{
int num3 = s[0];
int num4 = s[length - 1];
if (num3 > num4)
{
sum2 = sum2 + num3;
s.pop_front();
}
else
{
sum2 = sum2 + num4;
s.pop_back();
}
}
length = s.size();
}
return (sum1 - sum2);
}
int main()
{
int N;
cin >> N;
int numbers[100];
int num;
for (int i = 0; i < N; i++)
{
cin >> numbers[i];
}
int res = func(numbers, N);
cout << res << endl;
system("pause");
return 0;
}
#搜狗##笔试题目##include<deque>
using namespace std;
int func(int* a, int length)
{
deque<int> s;
int max = 0;
for (int i = 1; i < length; i++)
{
if (a[i] > a[max])
max = i;
}
for (int i = 0; i <= max; i++)
s.push_back(a[i]);
for (int j = length - 1; j > max; j--)
s.push_front(a[j]);
int sum1 = 0;
int sum2 = 0;
while (!s.empty())
{
int num1 = s[0];
int num2 = s[length - 1];
if (num1 > num2)
{
sum1 = sum1 + num1;
s.pop_front();
}
else
{
sum1 = sum1 + num2;
s.pop_back();
}
length = s.size();
if (length > 0)
{
int num3 = s[0];
int num4 = s[length - 1];
if (num3 > num4)
{
sum2 = sum2 + num3;
s.pop_front();
}
else
{
sum2 = sum2 + num4;
s.pop_back();
}
}
length = s.size();
}
return (sum1 - sum2);
}
int main()
{
int N;
cin >> N;
int numbers[100];
int num;
for (int i = 0; i < N; i++)
{
cin >> numbers[i];
}
int res = func(numbers, N);
cout << res << endl;
system("pause");
return 0;
}