码迷,mamicode.com
首页 > 其他好文 > 详细

[Leetcode]-Reverse Integer

时间:2015-06-28 21:40:06      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:leetcode

题目:Given an array of size n, find the majority element. The majority element is the element that appears more than ? n/2 ? times.
找出数组中出现超过? n/2 ?次的数据
三种解法:
1、参考别人的,很巧的解法
2、插入排序,排序后,nums? n/2 ?必定是出现超过? n/2 ?次的数据,而且插入排序在数据接近排序好的顺序的时候,时间复杂度为O(n)
3、快排,和2一样,只不过速度稍快 12ms

You may assume that the array is non-empty and the majority element always exist in the array.

typedef int elementtype;
//infact CUT = 10 is the best solution
#define CUT 10  
void swap(int *a,int *b)  
{  
    int tem = *a;  
    *a  = *b;  
    *b  = tem;  
}  
void insertion(elementtype A[],int n)  
{  
    int p = 0 ;  
    int j = 0 ;  
    for(p=1;p<n;p++ )  
    {  
        elementtype tem = A[p] ;   
        for(j=p;j>0&&A[j-1]>tem;j--)  
        {  
             A[j] = A[j-1];  
        }  
        A[j] = tem;  
    }  

}  
elementtype median3(elementtype A[],int left ,int right)  
{  
    int center = (left +right) / 2;  
    if(A[left]>A[center])  
        swap(&A[left],&A[center]);  
    if(A[left]>A[right])  
        swap(&A[left],&A[right]);  
    if(A[center]>A[right])  
        swap(&A[center],&A[right]);  

    swap(&A[center],&A[right-1]);  

    return A[right-1];  
}  
void Qsort(elementtype A[],int left, int right)  
{  
    int i,j;  
    elementtype pivot;  

    if(left + CUT<= right)  
    {  
        pivot = median3(A,left,right); //select middle element as pivot  
        i = left;j = right-1;  
        for(;;)  
        {  
            while(A[++i]<pivot){}  

            while(A[--j]>pivot){}  
            if(i<j)  
                swap(&A[i],&A[j]);  
            else  
                break;  
        }  
        swap(&A[i],&A[right-1]);  

        Qsort(A,left,i-1);  
        Qsort(A,i+1,right);  
    }  
    else  
        insertion(A+left,right-left+1);  
}  

int majorityElement(int* nums, int numsSize) {

    //solution 1 :13ms
    /*
    int cnt = 0, res;
    for (int i = 0; i < numsSize; ++i) {
        if (cnt == 0) res = nums[i];
        if (res == nums[i]) ++cnt;
        else --cnt;
    }
    return res;
    */

    //solution 2 insertion sort :28ms
    /*
    int p = 0 ;  
    int j = 0 ;  
    for(p=1;p<numsSize;p++ )  
    {  
        int tem = nums[p] ;   
        for(j=p;j>0&&nums[j-1]>tem;j--)  
        {  
             nums[j] = nums[j-1];  
        }  
        nums[j] = tem;  
    }  
    return nums[numsSize/2];
    */

    //solution 3 qiuk sort :12ms
    Qsort(nums,0,numsSize-1);  
    return nums[numsSize/2];

}

[Leetcode]-Reverse Integer

标签:leetcode

原文地址:http://blog.csdn.net/xiabodan/article/details/46674195

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!