← Static tasks

215. Kth Largest Element in an Array

leetcode medium

#array#backtracking#csharp#leetcode#medium#sort#string#tree

Task

Дан целочисленный массив nums и целое число k. Верните k-й наибольший элемент в массиве.

Обратите внимание, что это k-й наибольший элемент в отсортированном порядке, а не k-й уникальный элемент.

Пример:

Input: nums = [3,2,3,1,2,4,5,5,6], k = 4

Output: 4

C# solution

matched/original
public class Solution {
    public string ShortestPalindrome(string s) {
        int n = s.Length;
        char[] revArray = s.ToCharArray();
        Array.Reverse(revArray);
        string rev = new string(revArray);
        for (int i = 0; i < n; i++) {
            if (s.Substring(0, n - i) == rev.Substring(i)) {
                return rev.Substring(0, i) + s;
            }
        }
        return "";
    }
}

C++ solution

auto-draft, review before submit
#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 ShortestPalindrome(string s) {
        int n = s.size();
        char[] revArray = s.ToCharArray();
        Array.Reverse(revArray);
        string rev = new string(revArray);
        for (int i = 0; i < n; i++) {
            if (s.Substring(0, n - i) == rev.Substring(i)) {
                return rev.Substring(0, i) + s;
            }
        }
        return "";
    }
}

Java solution

matched/original
class Solution {
    public String shortestPalindrome(String s) {
        int n = s.length();
        String rev = new StringBuilder(s).reverse().toString();
        for (int i = 0; i < n; i++) {
            if (s.substring(0, n - i).equals(rev.substring(i))) {
                return rev.substring(0, i) + s;
            }
        }
        return "";
    }
}

JavaScript solution

matched/original
class Solution {
    shortestPalindrome(s) {
        const n = s.length;
        const rev = s.split('').reverse().join('');
        for (let i = 0; i < n; i++) {
            if (s.substring(0, n - i) === rev.substring(i)) {
                return rev.substring(0, i) + s;
            }
        }
        return "";
    }
}

Go solution

matched/original
package main

import (
  "strings"
)

func shortestPalindrome(s string) string {
  n := len(s)
  rev := reverseString(s)
  for i := 0; i < n; i++ {
    if s[:n-i] == rev[i:] {
      return rev[:i] + s
    }
  }
  return ""
}

func reverseString(s string) string {
  runes := []rune(s)
  for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
    runes[i], runes[j] = runes[j], runes[i]
  }
  return string(runes)
}

Explanation

Algorithm

1️⃣

Отсортируйте массив в порядке убывания:

Используйте стандартную функцию сортировки для сортировки элементов массива nums в порядке убывания. В этом случае самый большой элемент будет первым в массиве, второй по величине - вторым и так далее.

2️⃣

Найдите k-й по величине элемент:

После сортировки просто верните элемент, который стоит на позиции k-1 (учитывая, что индексация в массиве начинается с 0).

3️⃣

Верните результат:

Возвратите найденное значение как результат.

😎