远景笔试题两道有先出来的大佬说了leetcode原题,贴代码
第一题股票最大亏损
任意次买卖股票,寻找当前峰值和低谷值,之前做的利润最大,只要将原来的数组逆序就可以了:
#include <iostream> #include <vector> #include <algorithm> #include <sstream> using namespace std; int MaxKui(vector<int>& prices) { if(prices.empty()) return 0; int i = 0; int peak = prices[0]; int valley = prices[0]; int profit = 0; while(i < prices.size() - 1) { while(i < prices.size() - 1 && prices[i + 1] <= prices[i]) { i++; } valley = prices[i]; while(i < prices.size() - 1 && prices[i + 1] > prices[i]) { i++; } peak = prices[i]; profit += (peak - valley); } return profit; } int main() { string str=""; cin>>str; str+=','; istringstream is(str); vector<int> arr; int tmp; char c; while(is>>tmp>>c) { arr.emplace_back(tmp); } reverse(arr.begin(),arr.end()); if(MaxKui(arr)<0) { cout<<0<<endl; }else cout<<MaxKui(arr)<<endl; return 0; }
第二题最大光伏面板群:dfs遍历,遍历过的点清0:
#include <iostream> #include <vector> #include <cmath> #include <string> #include <sstream> using namespace std; int dfs(int i,int j,vector<vector<int> > &grid ) { int m=grid.size(); int n=grid[0].size(); int area=1; grid[i][j]=0; if(i-1>=0&&grid[i-1][j]==1)area+=dfs(i-1,j,grid); if(i+1<m&&grid[i+1][j]==1)area+=dfs(i+1,j,grid); if(j-1>=0&&grid[i][j-1]==1)area+=dfs(i,j-1,grid); if(j+1<n&&grid[i][j+1]==1)area+=dfs(i,j+1,grid); return area; } int maxArea(vector<vector<int> > &grid) { int m=grid.size(); int n=grid[0].size(); if(m==0) return 0; int ans=0; for(int i=0;i<m;++i) { for(int j=0;j<n;++j) { if(grid[i][j]==1) { ans=max(ans,dfs(i,j,grid)); } } } return ans; } int main() { int n,m; char c; cin>>n>>c>>m; vector<vector<int> >grid; for(int i=0;i<n;++i) { string str; int temp; char c; cin>>str; vector<int>arr; str+=','; istringstream is(str); while(is>>temp>>c) { arr.emplace_back(temp); } grid.emplace_back(arr); } cout<<maxArea(grid)<<endl; return 0; }今天错过科大讯飞的笔试,远景笔试过了给面试吧。。。。。