解题心得
要写出一个好的程序,有效解决问题,思路上就不能“太乖” —— 不能被题目的叙述过程所束缚,而是力求细思问题,抽象化问题,并找到背后的逻辑;最后抓住核心对象,去除多余项,简化过程
题面
做题记录
乍一看,笔者不成熟的思路就想着要开一个队列,然后果真按照题目叙述一个个比大小,再pop,再push_back哈哈哈
但是一去看元素取值范围,就已经被脑补出的时间、空间的占用逗笑了
思路详解
明确题目要求的量:。。。的坐标
不难发现
if k > n: 那么结果就是最大值的坐标
else:
- 那么只需要记录当前最大值的坐标
- 不断向后比较
- 遇到更大值时更新坐标
- 直到胜利k次结束
一言以蔽之,这个过程在一次遍历就可以结束~
AC代码见下:
class Solution {
public:int findWinningPlayer(vector<int>& skills, int k) {int sz = skills.size();int idx = 0, cnt = 0;for(int i=1; i<sz && cnt != k; i++){if(skills[idx] < skills[i]){idx = i;cnt = 1;} else cnt++;}return idx;}
};