今晚携程笔试,编程AC两道,附代码。
今天携程的编程题有点简单了,虽然AC两道,但不知道能不能有面试机会
.....
第一题:
股票最大利润。附leetcode原题链接
https://leetcode.com/problems/best-time-to-buy-and-sell-stock/
AC代码:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <sstream>
int maxProfit(vector<int>& prices) {
int n = prices.size();
if (n == 0) return 0;
int maxPro = 0;
int minPri = prices[0];
for (int i = 1; i < n; i++)
{
minPri = min(minPri, prices[i]);
maxPro = max(maxPro, prices[i] - minPri);
}
return maxPro;
}
int main() {
string str;
while (getline(cin,str))
{
vector<int> vec;
string s;
for (int i = 0; i < str.length(); i++) {
if (str[i] >= '0' && str[i] <= '9') {
//vec.push_back(int(str[i] - '0'));
s = s + str[i];
}
else{
stringstream ss;
ss << s;
int n;
ss >> n;
vec.push_back(n);
s = "";
}
}
stringstream ss;
ss << s;
int n;
ss >> n;
vec.push_back(n);
cout << maxProfit(vec) << "\n";
}
return 0;
}
通过率是67%的童鞋是只考虑了股价为个位数的情况吧,我开始也是。 第二题:二分查找
AC代码:
#include <iostream>
#include <vector>
using namespace std;
//从数组vec中找出num,返回位置下标
int findNum(vector<int> &vec, int num,int left,int right) {
int start = left;
int end = right;
while (start < end) {
int mid = start + (end - start) / 2;
if (vec[mid] < num) {
start = mid + 1;
}
if (vec[mid] > num) {
end = mid - 1;
}
if (vec[mid] == num)
return mid;
}
//没找到这个数,那就顺序遍历得出这个数应该插入的位置
int index = -1;
int i = 0;
while (i < vec.size()) {
if (vec[i] > num)
break;
i++;
}
return index - i;
}
int main() {
int x, n;
while (cin >> x) {
cin >> n;
vector<int> vec(n, 0);
for (int i = 0; i < n; i++) {
cin >> vec[i];
}
cout << findNum(vec, x, 0, n - 1) << "\n";
}
return 0;
}
以上是试卷第三部分的两道编程题,我本来以为编程题只有这两道,我全AC了,一阵窃喜,结果第四部分点开一看还是一道编程题......有必要么,直接全放第三部分不就行了..
题目大意是求n个节点的无向图的单源最短路径的长度,并且路径要经过这n节点。
这道题因为时间关系没做出来,AC的大神麻烦贴一下代码吧。



阿里巴巴公司氛围 651人发布