标签:Elements return help nums int res Equal 462 high
Given an integer array nums
of size n
, return the minimum number of moves required to make all array elements equal.
In one move, you can increment or decrement an element of the array by 1
.
Example 1:
Input: nums = [1,2,3] Output: 2 Explanation: Only two moves are needed (remember each move increments or decrements one element): [1,2,3] => [2,2,3] => [2,2,2]
Example 2:
Input: nums = [1,10,2,9] Output: 16
Constraints:
n == nums.length
1 <= nums.length <= 105
-109 <= nums[i] <= 109
class Solution { public int minMoves2(int[] nums) { Arrays.sort(nums); int t = nums[nums.length / 2]; int res = 0; for(int i : nums) res += Math.abs(t - i); return res; } }
找中间
class Solution { public int minMoves2(int[] nums) { Arrays.sort(nums); int t = help(nums, 0, nums.length - 1, nums.length / 2 ); int res = 0; for(int i : nums) res += Math.abs(t - i); return res; } public int help(int[] nums, int low, int high, int k) { int i = low - 1; int pivot = nums[high]; for(int j = low; j < high; j++){ if(nums[j] < pivot){ i++; swap(i, j, nums); } } swap(i+1, high, nums); if(i+1 == k) return nums[i+1]; else if(i + 1 < k) return help(nums, i + 2, high, k); else return help(nums, low, i, k); } public void swap(int i, int j, int[] nums){ int a = nums[i] + nums[j]; nums[j] = a - nums[j]; nums[i] = a - nums[j]; } }
用快select还慢了。。
标签:Elements,return,help,nums,int,res,Equal,462,high 来源: https://www.cnblogs.com/wentiliangkaihua/p/14788333.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。