--- tags: leetcode --- # [1509. Minimum Difference Between Largest and Smallest Value in Three Moves](https://leetcode.com/problems/minimum-difference-between-largest-and-smallest-value-in-three-moves/) ___ # My Solution ## The Key Idea for Solving This Coding Question sorting + sliding window ## C++ Code ```cpp= class Solution { public: int minDifference(vector<int>& nums) { if (nums.size() < 5) { // If the number of elements is less than or equal to four, // we can always adjust the values and let the minimum difference // to be zero. return 0; } // nums.size() >= 5; // Sort nums in ascending order. sort(begin(nums), end(nums)); // Use the idea of sliding window to find the minimum defference // after three moves. Because nums is sorted, we can treat nums // as circular array and choose three consecutive elements to // find the answer. After we choose three consecutive elements as // our window, assume the three consecutive elements are reset to // the maximum value outside the window. int lastIdx = nums.size() - 1; // Now, the first three elements are our window. // The maximum value outside the window is the last element. Change // the values of the first three elements to the value of nums[lastIdx]. int minDiff = nums[lastIdx] - nums[3]; // Treat nums as a circular array and choose nums[0], nums[1] and // nums[lastIdx] to be our window. // The maximum value outside the window is nums[lastIdx - 1]. // Change the values of nums[0], nums[1] and nums[lastIdx] to the // value of nums[lastIdx - 1]. minDiff = min(minDiff, nums[lastIdx - 1] - nums[2]); // Based upon the idea described above, choose nums[0], // nums[lastIdx] and nums[lastIdx - 1] to be our window. // Change the values of nums[0], nums[lastIdx] and // nums[lastIdx - 1] to the value of num[lastIdx - 2]. minDiff = min(minDiff, nums[lastIdx - 2] - nums[1]); // Based upon the idea described above, choose the last three // elements to be our window. // Change the values of the last three elements to the value // of nums[last - 3]. minDiff = min(minDiff, nums[lastIdx - 3] - nums[0]); // Since nums has been sorted, we don't have to iterate through // the whole array. // After the silding window covers the first three and last three // elements, we can find the minimum difference. return minDiff; } }; ``` ## Time Complexity ## Space Complexity # Miscellaneous <!-- # Test Cases ``` [5,3,2,4] ``` ``` [1,5,0,10,14] ``` ``` [3,100,20] ``` ``` [6,6,0,1,1,4,6] ``` ``` [1,5,6,14,15] ``` ``` [1,5,0,10,14] ``` * Runtime Error: ``` [1,3] ``` * Wrong Answer: ``` [82,81,95,75,20] ``` * Wrong Answer: ``` [5948,61227,91810,80992,85935,26866,70043,88210,10182,16465,56751,12393,44729,85241,41385,81154,9063,50508,63955,56598,65134,21576,61467,51848,3040,59751,87114,16058,3140,48368,45513,76202,73911,11972,49341,13643,42300,38656,31043,17335,23081,42407,41167,23600,19257,13274,48446,85905,67090,55680,65455,25794,37980,62248,82653,72050,31236,547,75515] ``` -->