【LeetCode75】第二十八题(649)Dota2参议院

目录

题目:

示例:

分析:

代码+运行结果:


题目:

【LeetCode75】第二十八题(649)Dota2参议院_第1张图片

示例:

【LeetCode75】第二十八题(649)Dota2参议院_第2张图片

分析:

那么分析一下题目,首先,我不打DOTA2,这题没法做,分析完毕

给一个数组表示一个参议员,按照从左到右的顺序开始行使权利,权利就是可以禁止另一个参议员的权利。假设每个参议员都会做出最好的决策。求,在最后,还会剩下哪一个阵营的参议员。

那么这道题可以直接模拟,我们就模拟他们参议员行使权利。

首先我们先明确一点,什么是最好的决策。最好的决策就是把下一个离自己最近的其他阵营的参议员干掉,这样在本轮中,敌方阵营就会少掉一次干掉本方阵营的机会,如果往后没有敌对阵营了,那么就把数组开始的第一个敌方阵营的参议员干掉。

能理解最好决策之后,写代码就是体力活了,可以参考下面的代码。

代码+运行结果:

class Solution {
public:
    bool check(string& senate){ //检查是否整个参议院都是同一个阵营
        for(auto& s:senate){
            if(s!=senate[0]) return false;
        }
        return true;
    }
    string predictPartyVictory(string senate) {
        int cur=0;
        int index=0;
        while(!check(senate)){
            index=cur+1;
            //往后找出第一个不同阵营的参议员
            while(index=senate.size()-1) cur=0; //如果当前下标大于等于数组长度了就置0从头开始
            else cur++;
        }
        return senate[0]=='R'?"Radiant":"Dire";
    }
};

【LeetCode75】第二十八题(649)Dota2参议院_第3张图片

你可能感兴趣的:(LeetCode75题解,算法,leetcode,c++,数据结构)