中位数 21% 通过 给定一个未排序的整数数组,找到其中位数。 中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数
来源:互联网 发布:后期软件 油画质感 编辑:程序博客网 时间:2024/03/29 08:08
菜鸟一枚,记录下自己的程序,希望也可以帮助到其他人。
class Solution {
public:
int median(vector<int> &nums) {
// write your code here
int s=nums.size();
if(nums.empty())
return 0;
else if(s==1)
return nums[0];
else if(s==2)
return nums[1];
else if(s==3)
return Median_three(nums,0,s-1);
else
{ msort(nums,0,s-1);
int m=nums[(s-1)/2];
// cout<<m<<endl;
return m;
}
}
private:
int Median_three(vector<int> &nums,int left,int right)
{
int center=(left+right)/2;
if(nums[left]>nums[center])
{
swap(nums[left],nums[center]);
}
if(nums[left]>nums[right])
{
swap(nums[left],nums[right]);
}
if(nums[center]>nums[right])
{
swap(nums[center],nums[right]);
}
swap(nums[center],nums[right-1]);
return nums[right-1];
}
void msort(vector<int> &nums,int left,int right)
{
int i,j;
if(left+3<=right)
{
i=left+1;
j=right-2;
while(i<j)
{
int pivot = Median_three(nums,left,right); //返回最初的较为适当的枢纽元
while(nums[i]<pivot)
{
i++;
}
while(nums[j]>pivot)
{
j--;
}
swap(nums[i],nums[j]); //当上面两个循环结束时,执行这一步
i++;
j--;
}
swap(nums[i],nums[right-1]);
msort(nums,left,i-1);
msort(nums,i+1,j);
}
else
{
int p,k,tmp;
for(p=0;p<nums.size();p++)
{
tmp=nums[p];
for(k=p;k>0 && nums[k-1]>tmp;k--) //当p之前的数有大于nums[p]时
nums[k]=nums[k-1];
nums[k]=tmp;
}
}
}
};
- 中位数 21% 通过 给定一个未排序的整数数组,找到其中位数。 中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数
- 给定一个未排序的整数数组,找到其中位数。 中位数是排序后数组的中间值,
- 两个排序数组的中位数
- 两个排序数组的中位数
- 两个排序数组的中位数
- 两个排序数组的中位数
- 两个排序数组的中位数
- 两个排序数组的中位数
- 两个排序数组的中位数
- 两个排序数组的中位数
- 【翻自LeetCode】求两排序后数组的中位数
- 给定一个未排序数组, 找出其中最长的等差数列
- 算法导论9.3-8 找出已排序的2个数组X[1..n]和Y[1..n]的共2n个数的中位数
- 给定一个无序数组,找到其中最小的K个数
- 给定一个排序后的数组,包含n个整数,但这个数组已被旋转过很多次,编写代码找出数组中的某个元素
- 定义一个一维数组,其元素个数从键盘中输入,元素的值为[100,200]的随机整数。 (1)输出数组的每个数 (2)对数组的数进行升序排序,输出排序后的数组元素 (3)从键盘上输入一个整数,查找该整数是
- 给两个排序好的数组,怎么求两个数组合并后的中位数?
- leetcode 求两个排序数组的中位数
- lightoj Rooks 1005 (棋盘放车问题) (数学规律)
- AutoCompleteTextView and MultiAutoCompleteTextView
- WebGL之ThreeJS学习之旅01
- 欧拉回路
- 浅谈RMI
- 中位数 21% 通过 给定一个未排序的整数数组,找到其中位数。 中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数
- 【多线程】ScheduledThreadPoolExecutor的scheduleAtFixedRate方法探究
- Linux集合
- linux下杀死进程的几种方法
- 大端字节序,小端字节序,以及负数的存储
- 在PE系统中上网
- java多线程(一)
- 1008. 数组元素循环右移问题 (20)
- java StringBuffer