649. Dota2 Senate

LeetCode medium original: C# #csharp #leetcode #medium #queue #string

C# 解法

照合済み/オリジナル
using System;
using System.Collections.Generic;
public class Solution {
    public string PredictPartyVictory(string senate) {
        Queue<int> radiant = new Queue<int>();
        Queue<int> dire = new Queue<int>();
        
        for (int i = 0; i < senate.Length; i++) {
            if (senate[i] == 'R') {
                radiant.Enqueue(i);
            } else {
                dire.Enqueue(i);
            }
        }
        
        while (radiant.Count > 0 && dire.Count > 0) {
            int r = radiant.Dequeue();
            int d = dire.Dequeue();
            if (r < d) {
                radiant.Enqueue(r + senate.Length);
            } else {
                dire.Enqueue(d + senate.Length);
            }
        }
        
        return radiant.Count > 0 ? "Radiant" : "Dire";
    }
}

C++ 解法

自動ドラフト、提出前に確認
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    public string PredictPartyVictory(string senate) {
        queue<int> radiant = new queue<int>();
        queue<int> dire = new queue<int>();
        
        for (int i = 0; i < senate.size(); i++) {
            if (senate[i] == 'R') {
                radiant.Enqueue(i);
            } else {
                dire.Enqueue(i);
            }
        }
        
        while (radiant.size() > 0 && dire.size() > 0) {
            int r = radiant.Dequeue();
            int d = dire.Dequeue();
            if (r < d) {
                radiant.Enqueue(r + senate.size());
            } else {
                dire.Enqueue(d + senate.size());
            }
        }
        
        return radiant.size() > 0 ? "Radiant" : "Dire";
    }
}

Java 解法

照合済み/オリジナル
import java.util.LinkedList;
import java.util.Queue;

public class Solution {
    public String predictPartyVictory(String senate) {
        Queue<Integer> radiant = new LinkedList<>();
        Queue<Integer> dire = new LinkedList<>();
        
        for (int i = 0; i < senate.length(); i++) {
            if (senate.charAt(i) == 'R') {
                radiant.add(i);
            } else {
                dire.add(i);
            }
        }
        
        while (!radiant.isEmpty() && !dire.isEmpty()) {
            int r = radiant.poll();
            int d = dire.poll();
            if (r < d) {
                radiant.add(r + senate.length());
            } else {
                dire.add(d + senate.length());
            }
        }
        
        return radiant.isEmpty() ? "Dire" : "Radiant";
    }
}

JavaScript 解法

照合済み/オリジナル
var predictPartyVictory = function(senate) {
    let radiant = [];
    let dire = [];
    
    for (let i = 0; i < senate.length; i++) {
        if (senate[i] === 'R') {
            radiant.push(i);
        } else {
            dire.push(i);
        }
    }
    
    while (radiant.length && dire.length) {
        let r = radiant.shift();
        let d = dire.shift();
        if (r < d) {
            radiant.push(r + senate.length);
        } else {
            dire.push(d + senate.length);
        }
    }
    
    return radiant.length ? "Radiant" : "Dire";
};

Python 解法

照合済み/オリジナル
from collections import deque

def predictPartyVictory(senate):
    radiant = deque()
    dire = deque()
    
    for i, s in enumerate(senate):
        if s == 'R':
            radiant.append(i)
        else:
            dire.append(i)
    
    while radiant and dire:
        r = radiant.popleft()
        d = dire.popleft()
        if r < d:
            radiant.append(r + len(senate))
        else:
            dire.append(d + len(senate))
    
    return "Radiant" if radiant else "Dire"

Go 解法

照合済み/オリジナル
package main

import (
    "fmt"
)

func predictPartyVictory(senate string) string {
    radiant := []int{}
    dire := []int{}
    
    for i, s := range senate {
        if s == 'R' {
            radiant = append(radiant, i)
        } else {
            dire = append(dire, i)
        }
    }
    
    for len(radiant) > 0 && len(dire) > 0 {
        r := radiant[0]
        d := dire[0]
        radiant = radiant[1:]
        dire = dire[1:]
        if r < d {
            radiant = append(radiant, r + len(senate))
        } else {
            dire = append(dire, d + len(senate))
        }
    }
    
    if len(radiant) > 0 {
        return "Radiant"
    }
    return "Dire"
}

Vacancies for this task

有効な求人 with overlapping task tags are 表示.

すべての求人
有効な求人はまだありません。