zoukankan      html  css  js  c++  java
  • [Leetcode]-Majority Element

    题目: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];
    
    }
  • 相关阅读:
    the process cannot access the file because it is being used by another process
    SharePoint 2013: The "New Web Application" button is disabled is the central administration
    【转】Windows按键消息—虚拟键码
    【转】windows消息16进制对应表
    C#将图片字节流转为Base64直接放入html的img标签src属性中
    WPF自定义Main函数
    c#geckofx文件流下载
    腾讯RTX登录提示失败问题及处理办法
    C# \u8888类型的unicode转换为字符串方法
    C#System.Net.Mail采用简单邮件传输协议发送邮件
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5118782.html
Copyright © 2011-2022 走看看