給定一個大小爲n的數組,找到其中的衆數。衆數是指在數組中出現次數大於[n/2]的元素。

方法一:

設計思路:給數組排序,由於衆數出現次數大於n/2,所以第n/2個元素就是衆數。

function mostNum(arr){
        var arr2 = arr.sort((a,b)=>{return b-a;});
        var zhong = arr[parseInt(arr.length/2)];
        return zhong;
    }

方法二:

設計思路:給定一個數組[32,34,32,12,78,32]

用第一個元素跟之後的所有元素比較,如果兩個元素相等,計時器count+1,並刪除這個相同元素。比較完成後,把count追加到result中。

這樣第二個元素就一定跟第一個元素不相等,計數器歸1,用第二元素跟之後元素相比,重複上個步驟。

最後數組arr剩餘的元素均不重複。

result中的元素跟arr中的元素一一對應,result元素就是arr中對應元素出現的次數。倆數組長度相同。result中大於n/2的就是衆數出現次數,它的index就是arr中衆數的index。如果沒有就是沒有衆數。

function mostNum(arr){
        var halfArr = arr.length/2;//獲取數組長度的二分之一
        var result=[];//用來存放arr元素出現次數
        console.log('數組長度爲:'+arr.length);//打印arr長度
        for(j=0;j<arr.length;j++){//獲取arr第j項元素
            var count=1;//聲明計數器
            for(i=j+1;i<halfArr*2;i++){//用arr的第j項跟arrj+1之後的項相比較
                if(arr[i]==arr[j]){//判斷如果相同
                    count++;//計數器+1
                    arr.splice(i,1);//刪除這個元素的重複項,只保留第一個,splice從第i項開始刪除,刪除一個元素
                    i--;//由於第i項被刪除,第i+1項會變成第i項,所以需要重新判斷
                }
            }
            result.push(count);//把計數結果添加到result數組中
        }
        console.log('數組result:'+result);//打印result最終結果
        console.log('數組arr:'+arr);//輸出arr去除重複項後的數組
        var zhong='';
        if(result.some((value,index)=>{return value>=halfArr;})==false){//判斷是否存在衆數
            zhong =  '沒有衆數';
        }else {
            result.some(function(value,index){//數組遍歷
                if(value>=halfArr){//如果計數結果中有大於arr數組一半的值,那這個值就是衆數的計數結果
                    console.log(arr[index]);
                    zhong = '衆數是:'+arr[index]+'<br>'+'衆數出現的次數:'+value;
                }
            });
        }
        return zhong;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章