https://leetcode.com/problems/minimum-moves-to-equal-array-elements-ii/

package com.company;

import java.util.*;

// https://discuss.leetcode.com/topic/68736/java-just-like-meeting-point-problem
// 以上是整体解法,获得中位数中位数就可以获得结果 (just like meeting point problem) // https://discuss.leetcode.com/topic/68758/java-o-n-time-using-quickselect/2
// 以上解法是 O(n) 获得中位数的方法 (其实是获得第K位结果的方法, Quick-select) class Solution {
// 对应上面的第一种方法
public int minMoves2_old(int[] nums) {
Arrays.sort(nums);
int i = , j = nums.length - ;
int ret = ;
while (i < j) {
ret += nums[j] - nums[i];
i++;
j--;
}
return ret;
} // 对应上面的第二种方法
public int minMoves2(int[] nums) {
int mid = getPos(nums, nums.length/+, , nums.length-);
int ret = ;
for (int i=; i<nums.length; i++) {
ret += Math.abs(nums[i]-mid);
}
return ret;
} private int getPos(int[] nums, int k, int start, int end) {
int pivot = nums[end];
int left = start;
int right = end; while (left <= right) {
while (left <= right && nums[left] < pivot) left++;
while (left <= right && nums[right] >= pivot) right--;
if (left > right) {
break;
}
swap(nums, left, right);
}
swap(nums, left, end);
if (k == left+) {
return nums[left];
}
if (k < left+) {
return getPos(nums, k, start, left-);
}
else {
return getPos(nums, k, left+, end);
} } private void swap(int[] nums, int a, int b) {
int tmp = nums[a];
nums[a] = nums[b];
nums[b] = tmp;
} } public class Main { public static void main(String[] args) throws InterruptedException { System.out.println("Hello!");
Solution solution = new Solution(); // Your Codec object will be instantiated and called as such:
int[] nums = {,,};
int ret = solution.minMoves2(nums);
System.out.printf("ret:%d\n", ret); System.out.println(); } }

最新文章

  1. TCP通信
  2. 深入理解Javascript--作用域和赋值操作
  3. java 截取url的参数
  4. Android项目中,在一个数据库里建立多张表
  5. javaScript数据类型与typeof操作符
  6. OpenSSH后门获取root密码及防范
  7. Duilib中Webbrowser事件完善使其支持判断页面加载完毕
  8. Java 流笔记
  9. Partial RenderPartial Action RenderAction 区别和用法
  10. G711
  11. php函数声明的简单实例
  12. 用Ultraiso刻录U盘装系统
  13. try...catch...finally...return的四角恋
  14. eclipse-java开发实用快捷键
  15. 苹果新的编程语言 Swift 语言进阶(九)--方法和下标
  16. Deepin Linux系统的日常使用总结(日常施工)
  17. year 和 weak year 的区别
  18. angular面试记忆的内容
  19. CSS字体大小之em,px,百分比
  20. HHvm建站环境搭建方法:Nginx,Mariadb,hhvm及lnmp/lamp安装部署

热门文章

  1. Splay的用法
  2. 封装BackgroundWorker控件(提供源代码下载,F5即可见效果)
  3. xcode8.1 autolayout 找不到 Update Frames 按钮
  4. zuul session 不一致的问题
  5. python week08 并发编程之多线程--理论部分
  6. Thanks for your encourage!
  7. linux 系统时间调整
  8. Spring 4.3.11.RELEASE文档阅读(二):Core Technologies_AOP
  9. 九度oj 题目1349:数字在排序数组中出现的次数
  10. [LOJ#530]「LibreOJ β Round #5」最小倍数