1509. Minimum Difference Between Largest and Smallest Value in Three Moves

LeetCode medium оригинал: C# #array #csharp #leetcode #math #medium #sort #two-pointers

Вам дан массив целых чисел nums.

За один ход вы можете выбрать один элемент массива nums и изменить его на любое значение.

Верните минимальную разницу между наибольшим и наименьшим значением в массиве nums после выполнения не более трех ходов.

Пример:

Input: nums = [5,3,2,4]

Output: 0

Explanation: We can make at most 3 moves.

In the first move, change 2 to 3. nums becomes [5,3,3,4].

In the second move, change 4 to 3. nums becomes [5,3,3,3].

In the third move, change 5 to 3. nums becomes [3,3,3,3].

After performing 3 moves, the difference between the minimum and maximum is 3 - 3 = 0.

C# решение

сопоставлено/оригинал
public class Solution {
    public int MinDifference(int[] nums) {
        int numsSize = nums.Length;
        
        if (numsSize <= 4) return 0;
        
        Array.Sort(nums);
        
        int minDiff = int.MaxValue;
        
        for (int left = 0, right = numsSize - 4; left < 4; left++, right++) {
            minDiff = Math.Min(minDiff, nums[right] - nums[left]);
        }
        
        return minDiff;
    }
}

C++ решение

auto-draft, проверить перед отправкой
#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 MinDifference(vector<int>& nums) {
        int numsSize = nums.size();
        
        if (numsSize <= 4) return 0;
        
        sort(nums.begin(), nums.end());
        
        int minDiff = int.MaxValue;
        
        for (int left = 0, right = numsSize - 4; left < 4; left++, right++) {
            minDiff = min(minDiff, nums[right] - nums[left]);
        }
        
        return minDiff;
    }
}

Java решение

auto-draft, проверить перед отправкой
import java.util.*;
import java.math.*;

// Auto-generated Java draft from the C# solution. Review API differences before LeetCode submit.
public class Solution {
    public int MinDifference(int[] nums) {
        int numsSize = nums.length;
        
        if (numsSize <= 4) return 0;
        
        Arrays.sort(nums);
        
        int minDiff = int.MaxValue;
        
        for (int left = 0, right = numsSize - 4; left < 4; left++, right++) {
            minDiff = Math.min(minDiff, nums[right] - nums[left]);
        }
        
        return minDiff;
    }
}

JavaScript решение

сопоставлено/оригинал
var minDifference = function(nums) {
    const numsSize = nums.length
    
    if (numsSize <= 4) return 0
    
    nums.sort((a, b) => a - b)
    
    let minDiff = Infinity
    
    for (let left = 0; left < 4; left++) {
        const right = numsSize - 4 + left
        minDiff = Math.min(minDiff, nums[right] - nums[left])
    }
    
    return minDiff
}

Python решение

сопоставлено/оригинал
class Solution:
    def minDifference(self, nums: List[int]) -> int:
        numsSize = len(nums)
        
        if numsSize <= 4:
            return 0
        
        nums.sort()
        
        minDiff = float('inf')
        
        for left in range(4):
            right = numsSize - 4 + left
            minDiff = min(minDiff, nums[right] - nums[left])
        
        return minDiff

Go решение

сопоставлено/оригинал
func minDifference(nums []int) int {
    numsSize := len(nums)
    
    if numsSize <= 4 {
        return 0
    }
    
    sort.Ints(nums)
    
    minDiff := int(^uint(0) >> 1) // equivalent to math.MaxInt
    
    for left, right := 0, numsSize - 4; left < 4; left, right = left + 1, right + 1 {
        if diff := nums[right] - nums[left]; diff < minDiff {
            minDiff = diff
        }
    }
    
    return minDiff
}

Algorithm

Инициализация: определите размер массива nums, если размер меньше или равен 4, верните 0. Отсортируйте массив nums и инициализируйте переменную minDiff очень большим числом.

Итерация по первым четырем элементам отсортированного массива: для каждого индекса left от 0 до 3 вычислите соответствующий правый индекс, разницу между элементами на этих индексах и обновите minDiff с минимальным значением.

Верните minDiff, которое хранит минимальную разницу между наибольшими и наименьшими значениями после удаления до трех элементов.

😎

Вакансии для этой задачи

Показаны активные вакансии с пересечением по тегам задачи.

Все вакансии
Активных вакансий пока нет.