中国电信云计算第三题输入求解

最后还是没搞出来的我……求各位大佬指点,以前也经常 case通过百分之零 现在想想说不准都是输入的问题
说一下自己的写法或者我哪里错了都好
(づ ̄3 ̄)づ╭❤~爱你们么么哒
输入:[2, 4, -5, 7, -8]

我的代码:
#include<iostream>
#include<map>
#include<vector>
#include<set>
#include <stdio.h>
#include <string>
using namespace std;

int max(int a, int b)
{
return a > b ? a : b;
}

int main()
{
string a;
getline(cin, a);//
vector<int> num;
for (int i = 0; i < a.size(); i++)
{
if (a[i] >= '0' && a[i] <= '9')
{
num.push_back(a[i] - '0');
}
if (a[i] == '-')
{
int tmp = a[++i] - '0';
num.push_back(0 - tmp);
}
}
int res = 0-99999;
int cur = 0;
for (int i = 0; i < num.size(); i++)
{
cur = max(cur + num[i], num[i]);
res = max(cur, res);
}
cout << res;
return 0;
}

#笔试题目##天翼云#
全部评论
c语言看不懂,原始字符串有很多空格,得先去除,这是个坑。leetcode有原题,最简单的就是动态规划了。你搜一下最长子序和类的关键字
点赞 回复
分享
发布于 2019-09-18 22:37
去掉两端的中括号,还有去掉数字间的逗号和空格,得到数组,最后我直接暴力求解就过了
点赞 回复
分享
发布于 2019-09-18 22:41
滴滴
校招火热招聘中
官网直投
#include <iostream> #include <unordered_map> #include <map> #include <algorithm> #include <string> #include <vector> #include<stack> #include<queue> #include<deque> #include<memory> using namespace std; int main() {     string str;     getline(cin,str);     //cout<<str<<endl;     vector<int> nums;     int sig = 1;     for(int i=0;i<str.size();i++)     {         if(str[i]=='-')         {             sig = -1;             continue;         }         if(str[i]>='0'&&str[i]<='9')         {             int num = 0;             while(i<str.size()&&str[i]>='0'&&str[i]<='9')             {                 num = 10*num+str[i]-'0';                 i++;             }             nums.push_back(sig*num);             sig = 1;         }     }     //for(auto n:nums)     //    cout<<n<<" ";     //cout<<endl;     int res = INT_MIN;     int ans = INT_MIN;     for(int i=0;i<nums.size();i++)     {         res = max(res+nums[i],nums[i]);         ans = max(ans,res);     }     cout<<ans<<endl; } 这是我A掉的,你可以参考一下
点赞 回复
分享
发布于 2019-09-18 22:48
用getchar稀释一下就行了 int main() {     int t;     int sum = 0;     int m = INT_MIN;     char c = getchar();     while(1)     {         cin >> t;         char c = getchar();         if(sum > 0)             sum+=t;         else             sum = t;         m = max(m,sum);         if(c == ']')             break;     }     cout << m;     return 0; } 时间复杂度O(n),空间O(1),也不需要存数组
点赞 回复
分享
发布于 2019-09-18 23:46
python爽啊,直接eval😆
点赞 回复
分享
发布于 2019-09-18 23:50
你的数字不考虑 多位数?
点赞 回复
分享
发布于 2019-09-19 00:26
#include <iostream> #include <vector> #include <sstream> using namespace std; // 字符串分割函数 void split(const string& s, vector<int>& sv, const char flag = ' ') { sv.clear(); istringstream iss(s); string temp; while (getline(iss, temp, flag)) { sv.push_back(stoi(temp)); } return; } int main(){ int start, end; vector<int> vec; string s, str; getline(cin, s); for(int i = 0; i < s.size(); i++){ if(s[i] == '[') start = s.find_first_of('['); if(s[i] == ']') end = s.find_last_of(']'); } for(int i = start + 1; i < end; i++) str += s[i]; split(str, vec, ','); cout << "验证输入\n"; for(auto x : vec) cout << x << ' '; return 0; }
点赞 回复
分享
发布于 2019-09-19 17:00

相关推荐

点赞 评论 收藏
转发
点赞 2 评论
分享
牛客网
牛客企业服务