搜狗第三题,吃糖

双端队列做的,感觉写的很一般,有大佬分享一下写的么?
#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;
}

#搜狗##笔试题目#
全部评论
题目要求小明要先拿,所以最大的那个肯定是小明拿走了,为什么你存入deque的时候,还要把整个数组存入?第一个 if 条件还要比较队首和队尾,从最大值那里切开,队尾肯定是最大的啊。我思路跟你的一样,但是只能AC 40。
点赞 回复 分享
发布于 2018-09-15 20:57
我TM居然没想到双端队列,一直计算队列的对首对尾还记录是否被吃过。浪费了我很多时间
点赞 回复 分享
发布于 2018-09-15 08:26
dp[i][j] 代表区间[i, j]先手最多比后手多多少糖 dp[i][j] = max(num[i] - dp[i + 1][j], num[j] - dp[i][j - 1]);  大概是这样
点赞 回复 分享
发布于 2018-09-15 08:00
说下思路呗,过了多少啊
点赞 回复 分享
发布于 2018-09-15 01:02
点个赞
点赞 回复 分享
发布于 2018-09-14 23:40

相关推荐

2025年10月3日中午,在写完定时一年后发给自己的信之后,敲下键盘,写下这篇文字。我把标题的“所有人”加了引号,因为如我们所见,确实有的人顺风顺水,每天过的很开心,或是早早进入大厂,或是年纪轻轻就拿到了高薪offer,或是过着可能我努力十年也不一定实现的生活。但也许,不是每个人的痛苦都能被别人看到的,这个月我经常会哭,被骗6000块钱、手上钱不够导致拖欠房租、生活还要借朋友钱、国庆长假也没有钱去旅游,互联网公司不稳定担心试用期不过(毕竟上段实习就是被裁了,一有点风吹草动就害怕),但这样的我,不是所有人都知道的,居然是有些朋友的羡慕对象。回忆我的七年“长跑”别人都是多年幸福的恋爱长跑,我没有恋...
故事和酒66:让每一颗种子找到合适自己的生长方式,最终绽放出独一无二的花朵,这远比所有人都被迫长成同一棵“参天大树”的世界,更加美好和富有生机。这是社会和环境的问题,而不是我们的问题。然而就是在这样的环境中,楼主依然能突破自我,逆势成长,其中的艰辛可想而知。这一路的苦难终究会化作你成长的养料
你小时候最想从事什么职业
点赞 评论 收藏
分享
熊大不大:微信也是华为旗下吧,我看我朋友也是华为工牌写wx
点赞 评论 收藏
分享
10-02 19:29
已编辑
浙江科技大学 运营
职场水母:等春招吧,春招才是双非的主战场,放心吧佬,实习很好,肯定能进大厂的
简历被挂麻了,求建议
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务