164. Maximum Gap

LeetCode medium original: C# #array #csharp #intervals #leetcode #math #medium #sort
選択した UI 言語に合わせて問題文をロシア語から翻訳します。コードは変更しません。

Дан 配列 целых чисел nums. return максимальную разницу между двумя последовательными elementами в его отсортированной форме. Если 配列 содержит менее двух elementов, return 0.

C# 解法

照合済み/オリジナル
public class Solution {
    public int MaximumGap(int[] nums) {
        if (nums == null ||
            nums.Length < 2) 
            return 0;
        Array.Sort(nums);
        int maxGap = 0;
        for (int i = 0; i < nums.Length - 1; i++)
            maxGap = Math.Max(nums[i + 1] - nums[i], maxGap);
        return maxGap;
    }
}

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 int MaximumGap(vector<int>& nums) {
        if (nums == null ||
            nums.size() < 2) 
            return 0;
        sort(nums.begin(), nums.end());
        int maxGap = 0;
        for (int i = 0; i < nums.size() - 1; i++)
            maxGap = max(nums[i + 1] - nums[i], maxGap);
        return maxGap;
    }
}

Java 解法

照合済み/オリジナル
public class Solution {
    public int maximumGap(int[] nums) {
        if (
            nums == null || nums.length < 2
        ) return 0; 
        Arrays.sort(nums);

        int maxGap = 0;

        for (int i = 0; i < nums.length - 1; i++) maxGap = Math.max(
            nums[i + 1] - nums[i],
            maxGap
        );

        return maxGap;
    }
}

JavaScript 解法

照合済み/オリジナル
var maximumGap = function (nums) {
    if (nums == null || nums.length < 2)
        return 0;

    nums.sort((a, b) => a - b)

    var maxGap = 0;

    for (var i = 0; i < nums.length - 1; i++)
        maxGap = Math.max(nums[i + 1] - nums[i], maxGap);

    return maxGap;
};

Python 解法

照合済み/オリジナル
class Solution:
    def maximumGap(self, nums):
        if (
            nums is None or len(nums) < 2
        ): 
            return 0

        nums.sort()  
        maxGap = 0

        for i in range(len(nums) - 1):
            maxGap = max(nums[i + 1] - nums[i], maxGap)

        return maxGap

Go 解法

照合済み/オリジナル
func maximumGap(nums []int) int {
    if len(nums) < 2 { 
        return 0
    }

    sort.Ints(nums)
    maxGap := 0

    for i := 0; i < len(nums)-1; i++ {
        diff := nums[i+1] - nums[i]
        if diff > maxGap {
            maxGap = diff
        }
    }

    return maxGap
}

Algorithm

例:

Input: nums = [3,6,9,1]

Output: 3

Explanation: The sorted form of the array is [1,3,6,9], either (3,6) or (6,9) has the maximum difference 3.

👨‍💻

アルゴリズム:

1️⃣

Инициализация:

Определите минимальное и максимальное значения в 配列е для расчета возможного максимального интервала (разрыва) между elementами в идеально распределенном 配列е.

Вычислите размер ведра (bucket size), необходимый для размещения всех elementов 配列а так, чтобы если 配列 был равномерно распределен, каждый ведер должен содержать хотя бы один element. Размер ведра = (max_value - min_value) / (количество elementов - 1).

2️⃣

Размещение elementов в ведрах:

Создайте ведра для хранения минимальных и максимальных значений каждого ведра. Используйте формулу для распределения каждого elementа в соответствующем ведре на основе его значения.

Игнорируйте пустые ведра при расчете максимального интервала.

3️⃣

Вычисление максимального интервала:

Пройдите через ведра и вычислите maximum интервал, сравнивая минимальное значение текущего непустого ведра с максимальным значением предыдущего непустого ведра.

maximum интервал будет наибольшей разницей между "минимальными" и "максимальными" значениями последовательных непустых ведер.

😎

Vacancies for this task

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

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