2022腾讯2022实习生笔试ak(4月24日后台&综合)

写了一小时多一点,为什么要有核心模式这种调试难度拉满的写法。。。

没昨天雷火的笔试难写,ABC签到D好好读题E DP

A:签到

B:先筛个素数,然后根据a的下标pop_back弹到只剩一个即可

int n = a.size();
vector<int>v(n+1);//素数0非素数1
v[1]=1;

for(int i=2;i<=n;i++)
	if(!v[i]){
		for(int j=2;i*j<=n;j++)
			v[i*j]=1;
	}

vector<int>tmp;
while(a.size() > 1){
	while(!a.empty()){
		if(!v[a.size()])
			tmp.push_back(a.back());
		a.pop_back();
	}
	while(!tmp.empty()){
		a.push(tmp.back());
		tmp.pop_back();
	}
}

C:前缀和

D:把所有给的表遍历一遍,以map<int,int>nex记录每个数下一个数是多少(数据所有数都不相同)就可以把环形链表还原出来了,然后以最小的数为起点正着跑一遍倒着跑一遍取字典序最小

 class Solution {
 public:
     map<int, int>nex;

     ListNode* makeList(vector<int>& a) {
         ListNode* head = NULL;
         ListNode* now = new ListNode(a[0]);
         head = now;
         for (int i = 1; i < a.size(); i++) {
             ListNode* tmp = new ListNode(a[i]);
             now->next = tmp;
             now = tmp;
         }
         return head;
     }

     ListNode* solve(vector<ListNode*>& a) {
         // write code here
         int MIN = 1e9 + 10;
         for (auto i : a) {
             int last = -1;
             while (i != NULL) {
                 if (last != -1)
                     nex[last] = i->val;
                 MIN = min(i->val, MIN);
                 last = i->val;
                 i = i->next;
             }
         }
         vector<int>res;
         res.push_back(MIN);
         int now = MIN;
         while (nex[now] != MIN) {
             now = nex[now];
             res.push_back(now);
         }
         vector<int>ans;
         ans.push_back(res[0]);
         for (int i = res.size() - 1; i > 0; i--)
             ans.push_back(res[i]);
         int ok = 0;
         for (int i = 1; i < res.size(); i++) {
             if (res[i] < ans[i])
                 break;
             else if (res[i] > ans[i]) {
                 ok = 1;
                 break;
             }
         }
         return (ok == 0 ? makeList(res) : makeList(ans));
     }
 };

E:\(dp_i\)表示手上有i只股票最多能剩多少钱(手上,不是总资产),初始化dp[0]=m(一开始没买股票,手上有m块),\(n^2\)转移取max,最后算一下总资产,题意是:
\(最终总资产 = 最后手上的钱+手上的股票数*最后一天的股价\)

没了

posted @ 2022-04-24 22:01  Lecoww  阅读(71)  评论(0编辑  收藏  举报