Нам дан tableau символов letters, sorted в неубывающем порядке, и символ target. В tableauе letters есть как минимум два разных символа. returnsся наименьший символ в letters, который лексикоgrapheически больше target. Если такого символа не существует, returnsся первый символ в буквах.
Exemple:
Input: letters = ["c","f","j"], target = "a"
Output: "c"
C# solution
correspondant/originalpublic class Solution {
public char NextGreatestLetter(char[] letters, char target) {
int left = 0, right = letters.Length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (letters[mid] > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return letters[left % letters.Length];
}
}
C++ solution
brouillon automatique, à relire avant soumission#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 char NextGreatestLetter(char[] letters, char target) {
int left = 0, right = letters.size() - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (letters[mid] > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return letters[left % letters.size()];
}
}
Java solution
correspondant/originalpublic class Solution {
public char nextGreatestLetter(char[] letters, char target) {
int left = 0, right = letters.length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (letters[mid] > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return letters[left % letters.length];
}
}
JavaScript solution
correspondant/originalvar nextGreatestLetter = function(letters, target) {
let left = 0;
let right = letters.length - 1;
while (left <= right) {
const mid = Math.floor((left + right) / 2);
if (letters[mid] > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return letters[left % letters.length];
};
Python solution
correspondant/originaldef nextGreatestLetter(letters, target):
left, right = 0, len(letters) - 1
while left <= right:
mid = (left + right) // 2
if letters[mid] > target:
right = mid - 1
else:
left = mid + 1
return letters[left % len(letters)]
Go solution
correspondant/originalpackage main
func nextGreatestLetter(letters []byte, target byte) byte {
left, right := 0, len(letters)-1
for left <= right {
mid := (left + right) / 2
if letters[mid] > target {
right = mid - 1
} else {
left = mid + 1
}
}
return letters[left % len(letters)]
}
Algorithm
Использовать бинарный поиск для нахождения позиции первого символа в letters, который лексикоgrapheически больше target.
Если найденный символ существует, вернуть его.
Если такого символа не существует, вернуть первый символ в letters.
😎
Vacancies for this task
offres actives with overlapping task tags are affichés.
Il n'y a pas encore d'offres actives.