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>


  • 相关阅读:
    雅礼集训2017day5乱写
    任意值域最长公共子序列问题
    雅礼集训2017day4乱写
    雅礼集训2017day2乱写
    SP839
    雅礼集训2017day1乱写
    CF671E
    仅维护当前区间影响类问题的线段树
    「雅礼集训 2017 Day4」编码
    Codeforces Round #503 Div. 2
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/7140840.html
Copyright © 2011-2022 走看看