Leetcode 179周赛小结
Posted 不搞事情和咸鱼有什么区别
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode 179周赛小结相关的知识,希望对你有一定的参考价值。
5352. 生成每种字符都是奇数个的字符串
给你一个整数 n
,请你返回一个含 n
个字符的字符串,其中每种字符在该字符串中都恰好出现 奇数次 。
返回的字符串必须只含小写英文字母。如果存在多个满足题目要求的字符串,则返回其中任意一个即可。
题解:奇数全填某个字符,偶数先填n-1个字符再填一个不同的字符就可以了。
5353. 灯泡开关 III
题解:顺序遍历题目给的开灯序列。定义两个指针,pos,max_open。pos指向的位置以及其之前的位置所有的灯都是开着的,max_open指向到目前为止,所有开着的灯的最大序号。
pos==max_open的时候,灯的颜色就可以变成蓝色。
AC代码:
int numTimesAllBlue(vector<int>& light) { int Len = light.size(); int flag[Len+10]; for(int i = 0;i<=Len;i++) flag[i] = 0; int pos = 0; int ans= 0; int max_open = 0; for(int i =0;i<Len;i++) { max_open = max(max_open,light[i]); flag[light[i]] = 1; while(pos+1 <= Len && flag[pos+1] == 1) pos++; // updata pos if(pos >= max_open) ans++; } return ans; }
5354. 通知所有员工所需的时间
题解:根据manager数组建树,建好之后BFS,队列存节点和花费的时间。最终结果为所有能到达的叶子节点的最大花费。
AC代码:
int numOfMinutes(int n, int headID, vector<int>& manager, vector<int>& informTime) { int Len = manager.size(); vector<int> edge[Len+10]; int ans = INT_MIN; for(int i=0;i<Len;i++) { if(manager[i] == -1) continue; edge[manager[i]].push_back(i); } typedef pair<int,int> pii; queue<pii> que; que.push(make_pair(headID,0)); while(!que.empty()) { pii now = que.front(); que.pop(); int now_id = now.first; ans = max(ans,now.second); for(int i=0;i<edge[now_id].size();i++) { int cost = now.second+informTime[now_id]; que.push(make_pair(edge[now_id][i],cost)); } } return ans; }
5355. T秒后青蛙的位置
题解:根据无向边建图,建图BFS更新概率。有两个点要注意:
1. 在更新到target点的时候,此时的层数小于t秒。如果target点不是叶子节点,那么t秒的时候青蛙无法在target点。
2. 梳理清楚BFS层数和时间T的关系(可能这段时间玩太多了,比赛的时候不是很专注,这里WA了好几发)
AC代码:
double frogPosition(int n, vector<vector<int>>& edges, int t, int target) { vector<int> edge[110]; int Len = edges.size(); double dp[110]; int vis[110]; for(int i=0;i<=100;i++) { vis[i] = 0; dp[i] = 0.00; } for(int i=0;i<Len;i++) { edge[edges[i][0]].push_back(edges[i][1]); edge[edges[i][1]].push_back(edges[i][0]); } typedef pair<int,int> pii; queue<pii> que; que.push(make_pair(1,0)); vis[1] = 1; dp[1] = 1.0000000; while(!que.empty()) { pii now = que.front(); que.pop(); // cout << now.second <<endl; if(now.second >= t) break; int now_id = now.first; int Len = edge[now_id].size(); int tmp_Len = 0; //ava leaf node for(int i=0;i<Len;i++) if(vis[edge[now_id][i]] == 0) tmp_Len++; // if(now_id == target) // { // cout << now.second <<" " << tmp_Len << endl; // } if(now_id == target && now.second < t && tmp_Len != 0) return 0.0; for(int i=0;i<Len;i++) { if(vis[edge[now_id][i]] == 1) continue; vis[edge[now_id][i]] = 1; dp[edge[now_id][i]] = dp[now_id] * (1.0/(tmp_Len*1.0)); que.push(make_pair(edge[now_id][i],now.second+1)); } } cout << dp[target] << endl; return dp[target]; }
一些感想:
近来状态确实不佳,也算开始调整了。
和室友聊了一聊,得知了他在家里的学习状态以及他周赛的成绩,反观自己,连基础题写的bug也有不少,写的时候注意力也不是很集中,也很容易想一些其他的事情。
想了想,我这一个时间段能做好的事情不多,也该压一压学习了。之前一天也就看个四五个小时的书,室友看8-9个小时,周赛打的不如意也正常,写的太少了平时写的时候也不能说
写的很专注,这点一定得改。平时都不够专注,别指望比赛的时候能够有多专注。
图和数据结构的一些算法也确实挺久没有复习了,所有写起来的时候磕磕绊绊的。后面的一周除了补一些题目之外,可以有针对的去写这方面的题目~
好了吃饭去了,稳定的阶段性收获是坚持的最大动力,浪费这么久时间了,也该有一个学生的样子了,愿不负韶华。
以上是关于Leetcode 179周赛小结的主要内容,如果未能解决你的问题,请参考以下文章