zoukankan      html  css  js  c++  java
  • 找中位数O(n)算法

    题目描写叙述:

    给定一个未排序的整数数组,找到当中位数。


    中位数是排序后数组的中间值,假设数组的个数是偶数个。则返回排序后数组的第N/2个数。



    例子
    给出数组[4, 5, 1, 2, 3], 返回 3

    给出数组[7, 9, 4, 5],返回 5


    解题思路:

    利用快排划分的思想,递归处理。


    參考代码:

    <span style="font-size:18px;">public class Solution {
    
    public int median(int[] nums) {
    	return sub(nums, 0, nums.length - 1, (nums.length + 1) / 2);
    }
    private int sub(int[] nums, int start, int end, int size) {
    	int mid = (start + end) / 2;
    	int pivot = nums[mid];
    	int i = start - 1, j = end + 1;
    	for (int k = start; k < j; k++) {
    		if (nums[k] < pivot) {
    			i++;
    			int tmp = nums[i];
    			nums[i] = nums[k];
    			nums[k] = tmp;
    		}
    		else if (nums[k] > pivot) {
    			j--;
    			int tmp = nums[j];
    			nums[j] = nums[k];
    			nums[k] = tmp;
    			k--;
    		}
    	}
    	if (i - start + 1 >= size) {
    		return sub(nums, start, i, size);
    	}
    	else if (j - start >= size) {
    		return nums[j - 1];
    	}
    	else {
    		return sub(nums, j, end, size - (j - start));
    	}
    }
    }</span>


  • 相关阅读:
    「题解」:毛一琛/$cow$ $subsets$
    「题解」:$e$
    「题解」:$d$
    「题解」:$Simple$
    「题解」:$Game$
    「题解」:砖块
    「题解」:天才绅士少女助手克里斯蒂娜
    约瑟夫问题小结
    「题解」:[loj2763][JOI2013]现代豪宅
    20190812
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/7140840.html
Copyright © 2011-2022 走看看