Ən kiçik diapazon II Leetcode həlli

Çətinlik səviyyəsi Mühit
Tez-tez soruşulur Çiy kərpic almaBaxılıb 22

Problem bəyanat :

Ən kiçik diapazon II Leetcode həlli – Sizə tam ədədlər massivi verilir nömrə və tam ədəd k.

Hər bir indeks üçün i hara 0 <= i < ədədlər.uzunluq, dəyişdirin nums [i] ya olmaq ədəd[i] + k or ədəd[i] – k.

The hesab of nömrə -dəki maksimum və minimum elementlər arasındakı fərqdir nömrə.

Qayıtmaq minimum hesab of nömrə hər bir indeksdəki dəyərləri dəyişdirdikdən sonra.

Misal:

Məsələn 1 

Input: nums = [1], k = 0
Output: 0
Explanation: The score is max(nums) - min(nums) = 1 - 1 = 0.

Məsələn 2

Input: nums = [0,10], k = 2
Output: 6
Explanation: Change nums to be [2, 8]. The score is max(nums) - min(nums) = 8 - 2 = 6.

Məsələn 3

Input: nums = [1,3,6], k = 3
Output: 3
Explanation: Change nums to be [4, 6, 3]. The score is max(nums) - min(nums) = 6 - 3 = 3.

Məhdudiyyətlər:

Ən kiçik diapazon II Leetcode həlli

Müşahidə:

  • Qoy edək maksimum massivdəki element be max minimum element dəqiqə.
  • Əgər massiv dəyərlərini dəyişdirməyə icazə verilməsəydi, o zaman tamamilə aydındır ki maksimum fərq (maxdiff) olacaq

                                                                         maxdiff= max-min.

    • Amma bizim məqsəd bu fərqi minimuma endirməkdir Bəs bunu hansı yolla edə bilərik? Aydındır ki, hər ikisi tərəfindən hündürlükləri k ilə artırmaq və ya azaltmaq. Gəlin hamısını sınayaq mümkün birləşmələr artan və azalan min və maks.
  • Həm maksimum, həm də minimum hündürlüklərin artırılması:
    Yeni maksimum = maks + k
    Yeni minimum =  min + k
    Yeni maxdiff = ( maks + k ) - ( min + k ) = maksimum – min
    Bu, orijinal maxdiff ilə eynidir. Beləliklə, hər iki dəyərin artırılması orijinal cavabı dəyişmir və buna görə də istifadəsi yoxdur.
  • Həm maksimum, həm də minimum hündürlüklərin azaldılması:
    Yeni maksimum = maksimum – k
    Yeni minimum =min – k
    Yeni maxdiff = ( maksimum – k) - ( min – k) = maksimum – min
    Bu, orijinal maxdiff ilə eynidir. Beləliklə, hər iki dəyərin azalması orijinal cavabı dəyişmir və buna görə də istifadəsi yoxdur.
  • Maksimum artım və minimum hündürlüklərin azalması:
    Yeni maksimum = maks + k
    Yeni minimum =  min – k
    Yeni maxdiff = ( maks + k ) - ( min – k) = maksimum – min + 2*k
    Orijinal fərqimizi artırdıq 2*k. Bu, cavabımızı pisləşdirəcək və buna görə də belədir istifadəsi yoxdur.
  • Maksimum azaldılması və minimum hündürlüyün artırılması:
    Yeni maksimum = maksimum – k
    Yeni minimum = min + k
    Yeni maxdiff = (  maksimum – k ) - ( min + k ) = maksimum-min – 2*k
    Orijinal fərqimizi azaltdıq 2*k. Bu olacaq cavabımızı təkmilləşdirin.

Beləliklə, cavabımızı yaxşılaşdırmaq üçün massivin maksimum dəyərini azaltmalı və minimum dəyəri artırmalıyıq.

Alqoritm:

  • Başlanğıcda cür massivi, beləliklə biz arasında ən yaxşı fərqlərdən birini tapa bilək dəqiqə dəyəri və max verilmiş massivdəki dəyər. (yəni, yuxarıdakı kodda ans dəyişəni).
  • İndi, massivdə təkrarlayın və cərəyanı artırın i'th k ilə qiymət verin və ilə müqayisə edin ədəd[n-1]-k, tapmaq üçün yeni maks.
  • Azaldın i + 1 ilə k və tapmaq yeni min müqayisə etməklə ədəd[0]+k.
  •  Nəhayət, qayıt il olanları max-min min fərqi.

Ən kiçik diapazon üçün kod II

Java Kodu

// we need to find min Score (Maximum - Minimum )
// for minmising we can decrease the maximum one or else we can increase the minimum
// first find the min and max of nums
class Solution {
    public int smallestRangeII(int[] nums, int k) {
 int n = nums.length;
        Arrays.sort(nums);
        int maxE=nums[n-1];
        int minE=nums[0];
        int ans=maxE-minE;

        for (int i = 0; i < n - 1; ++i) {
            
            int currMax = Math.max(nums[n-1] - k, nums[i] + k);
            int currMin = Math.min(nums[0] + k, nums[i+1] - k);
            ans = Math.min(ans, currMax - currMin);
        }
        return ans;
    }
}

C++ kodu

class Solution {
public:
    int smallestRangeII(vector<int>& nums, int k) {
        int n=nums.size();
        sort(nums.begin(),nums.end());
        int maxE=nums[n-1];
        int minE=nums[0];
        int ans=maxE-minE;
        for(int i=0;i<n-1;i++){
            int currMax=max(maxE-k,nums[i]+k);
            int currMin=min(minE+k,nums[i+1]-k);
            ans=min(currMax-currMin,ans);
            
        }
        return ans;
        
    }
};

Ən kiçik diapazon II Leetcode Həlli üçün Mürəkkəblik Təhlili

Zamanın mürəkkəbliyi

, Harada N uzunluğu nömrə.

Kosmik Mürəkkəblik 

 O(1).

Translate »