维护了一个排好序的vector,每次用二分法插入数,插入的平均时间复杂度为O(logN)。
class Solution {
void InsertAndSort(vector<int>& sortVector,int num){
int low=0;
int high=sortVector.size()-1;
while(low<high){
if(num>=sortVector[low]&&num<=sortVector[low+1]){
sortVector.insert(sortVector.begin()+low+1,num);
return;
}
if(num>sortVector[(low+high)/2]){
if(low==(low+high)/2)
low=(low+high)/2+1;
else
low=(low+high)/2;
}
else
high=(low+high)/2;
}
//when sortVector is empty.
if(high==-1)
sortVector.push_back(num);
//when num should be in the front or at the back.
else{
if(num<=sortVector[0])
sortVector.insert(sortVector.begin(),num);
else if(num>=sortVector.back())
sortVector.insert(sortVector.end(),num);
}
return;
}
public:
/**
* @param nums: A list of integers.
* @return: The median of numbers
*/
vector<int> medianII(vector<int> &nums) {
// write your code here
vector<int> sortVector;
vector<int> result;
for(int i=0;i<nums.size();i++){
InsertAndSort(sortVector,nums[i]);
result.push_back(sortVector[i/2]);
}
return result;
}
};