Дан список оценок различных студентов, items, где items[i] = [IDi, scorei] представляет собой одну оценку студента с идентификатором IDi. Вычислите среднее значение пяти лучших оценок каждого студента.
return ответ в виде arrayа пар result, где result[j] = [IDj, topFiveAveragej] представляет студента с идентификатором IDj и его среднее значение пяти лучших оценок. Отсортируйте result по IDj в порядке возрастания.
Среднее значение пяти лучших оценок студента вычисляется путем сложения его пяти лучших оценок и деления на 5 с использованием целочисленного деления.
Esempio:
Input: s = "{a,b}c{d,e}f"
Output: ["acdf","acef","bcdf","bcef"]
C# soluzione
abbinato/originalepublic class Solution {
private int StoreFirstOptions(string s, int startPos, List<char> firstOptions) {
if (s[startPos] != '{') {
firstOptions.Add(s[startPos]);
} else {
startPos++;
while (s[startPos] != '}') {
if (char.IsLower(s[startPos])) {
firstOptions.Add(s[startPos]);
}
startPos++;
}
firstOptions.Sort();
}
return startPos + 1;
}
private List<string> FindAllWords(string s, int startPos) {
if (startPos == s.Length) {
return new List<string> { "" };
}
List<char> firstOptions = new List<char>();
int remStringStartPos = StoreFirstOptions(s, startPos, firstOptions);
List<string> wordsWithRemString = FindAllWords(s, remStringStartPos);
List<string> expandedWords = new List<string>();
foreach (char c in firstOptions) {
foreach (string word in wordsWithRemString) {
expandedWords.Add(c + word);
}
}
return expandedWords;
}
public List<string> Expand(string s) {
return FindAllWords(s, 0);
}
}
C++ soluzione
bozza automatica, rivedere prima dell'invio#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:
private int StoreFirstOptions(string s, int startPos, List<char> firstOptions) {
if (s[startPos] != '{') {
firstOptions.push_back(s[startPos]);
} else {
startPos++;
while (s[startPos] != '}') {
if (char.IsLower(s[startPos])) {
firstOptions.push_back(s[startPos]);
}
startPos++;
}
firstOptions.Sort();
}
return startPos + 1;
}
private List<string> FindAllWords(string s, int startPos) {
if (startPos == s.size()) {
return new List<string> { "" };
}
List<char> firstOptions = new List<char>();
int remStringStartPos = StoreFirstOptions(s, startPos, firstOptions);
List<string> wordsWithRemString = FindAllWords(s, remStringStartPos);
List<string> expandedWords = new List<string>();
foreach (char c in firstOptions) {
foreach (string word in wordsWithRemString) {
expandedWords.push_back(c + word);
}
}
return expandedWords;
}
public List<string> Expand(string s) {
return FindAllWords(s, 0);
}
}
Java soluzione
abbinato/originaleclass Solution {
private int storeFirstOptions(String s, int startPos, List<Character> firstOptions) {
if (s.charAt(startPos) != '{') {
firstOptions.add(s.charAt(startPos));
} else {
startPos++;
while (s.charAt(startPos) != '}') {
if (Character.isLowerCase(s.charAt(startPos))) {
firstOptions.add(s.charAt(startPos));
}
startPos++;
}
Collections.sort(firstOptions);
}
return startPos + 1;
}
private List<String> findAllWords(String s, int startPos) {
if (startPos == s.length()) {
return Arrays.asList("");
}
List<Character> firstOptions = new ArrayList<>();
int remStringStartPos = storeFirstOptions(s, startPos, firstOptions);
List<String> wordsWithRemString = findAllWords(s, remStringStartPos);
List<String> expandedWords = new ArrayList<>();
for (char c : firstOptions) {
for (String word : wordsWithRemString) {
expandedWords.add(c + word);
}
}
return expandedWords;
}
public List<String> expand(String s) {
return findAllWords(s, 0);
}
}
JavaScript soluzione
abbinato/originaleclass Solution {
storeFirstOptions(s, startPos, firstOptions) {
if (s[startPos] !== '{') {
firstOptions.push(s[startPos]);
} else {
startPos++;
while (s[startPos] !== '}') {
if (s[startPos] >= 'a' && s[startPos] <= 'z') {
firstOptions.push(s[startPos]);
}
startPos++;
}
firstOptions.sort();
}
return startPos + 1;
}
findAllWords(s, startPos) {
if (startPos === s.length) {
return [""];
}
const firstOptions = [];
const remStringStartPos = this.storeFirstOptions(s, startPos, firstOptions);
const wordsWithRemString = this.findAllWords(s, remStringStartPos);
const expandedWords = [];
for (const c of firstOptions) {
for (const word of wordsWithRemString) {
expandedWords.push(c + word);
}
}
return expandedWords;
}
expand(s) {
return this.findAllWords(s, 0);
}
}
Python soluzione
abbinato/originaleclass Solution:
def storeFirstOptions(self, s: str, startPos: int, firstOptions: List[str]) -> int:
if s[startPos] != '{':
firstOptions.append(s[startPos])
else:
startPos += 1
while s[startPos] != '}':
if s[startPos].islower():
firstOptions.append(s[startPos])
startPos += 1
firstOptions.sort()
return startPos + 1
def findAllWords(self, s: str, startPos: int) -> List[str]:
if startPos == len(s):
return [""]
firstOptions = []
remStringStartPos = self.storeFirstOptions(s, startPos, firstOptions)
wordsWithRemString = self.findAllWords(s, remStringStartPos)
expandedWords = []
for c in firstOptions:
for word in wordsWithRemString:
expandedWords.append(c + word)
return expandedWords
def expand(self, s: str) -> List[str]:
return self.findAllWords(s, 0)
Algorithm
Вызовите функцию findAllWords(String, Integer) с данной строкой s и значением startPos равным 0. startPos представляет текущую позицию в строке s. Если stringa, которую нужно рассмотреть, пуста (startPos == s.length()), return список, содержащий пустую строку.
Вызовите функцию storeFirstOptions с строкой s, целым numberм startPos и пустым списком firstOptions. find набор символов, начиная с позиции startPos, и сохраните их в списке firstOptions. Это может быть один символ или все символы между скобками. Отсортируйте список firstOptions. return обновленное значение startPos, которое теперь указывает на первый индекс следующей группы символов в строке s, которую мы будем рассматривать. Сохраните это значение в переменной remStringStartPos. Сделайте рекурсивный вызов функции findAllWords(String, Integer) с строкой s и remStringStartPos. Сохраните возвращенный список слов в переменной wordsWithRemString.
Переберите слова в wordsWithRemString и добавьте вышеуказанный символ в начало каждого слова, сохраняя новую строку в списке expandedWords. return список expandedWords.
😎
Vacancies for this task
offerte attive with overlapping task tags are mostrati.