1. 程式人生 > >查詢一個數組中出現次數最多的值(長度為1000)

查詢一個數組中出現次數最多的值(長度為1000)

今天有一道面試題就是這個問題,然後我自己的解決方法是這樣的:

   var findMost = function(arr){
       let arrL=[],arrN=[],count=1;
       //定義兩個陣列 一個存出現次數 一個存出現的數  順帶定義一個初始出現次數1
       for(const i of arr.keys()){
           for(var j = i+1;j<arr.length;j++){
               if(arr[i]==arr[j]){
                   count++;//如果和後面的值相同 就將出現次數+1
arr.splice(arr[j],1);//刪掉後面這個值相同的 j=j-1;//將j往前移一位 不然會出現少迴圈的問題 } } if(j==arr.length){ //判斷j如果j==arr.length說明就是第二個迴圈完成了 這個時候就可以儲存這個迴圈的值了 arrL.push(count); arrN.push(arr[i]); count = 1
;//初始出現次數count } } console.log(arrL,arrN);//列印各個數出現的次數 //接下來判斷arrL陣列中最大的值了 maxL = arrL[0]; for(const i of arrL.keys()){ if(maxL<arrL[i]){ maxL = arrL[i]; } } console.log(maxL); const index = arrL.indexOf(maxL); const
Most = arrN[index]; console.log("出現次數最多的值是:"+Most+";出現次數為:"+maxL); } findMost([1,2,3,4,5,2,2,34,4,5,322,3,4,54,34]);

然後面試官說我沒考慮時間複雜度(其實我是不懂時間複雜度這個東西),然後他提示我和雜湊表啥的思路,但是我還是不會,然後剛剛看了一下部落格,發現了一個貌似感覺應該更簡單的方法,不知道是不是面試官說的那種(其實我是真的菜鳥)

//hash啊 說個思路,定義一個物件obj,遍歷陣列, 物件的鍵為陣列的元素,值為出現的次數。然後遍歷這個物件,找出值為最大的那個。
function findMost(arr) {
    if (!arr.length) return
    if (arr.length === 1) return 1
    var res = {}
    // 遍歷陣列
    for (var i=0,l=arr.length;i<l;i++) {
        if (!res[arr[i]]) {
            res[arr[i]] = 1
        } else {
            res[arr[i]]++
        }
    }
    // 遍歷 res
    var keys = Object.keys(res)
    var maxNum = 0, maxEle
    for (var i=0,l = keys.length;i<l;i++) {
        if (res[keys[i]] > maxNum) {
            maxNum = res[keys[i]]
            maxEle = keys[i]
        }
    }
    return maxNum
}

後面延伸問了一個判斷兩個物件是否相同,嗯,我不會,我當時只是跟他講了一下思路,我好好理理。

相關推薦

查詢個數出現次數長度1000

今天有一道面試題就是這個問題,然後我自己的解決方法是這樣的: var findMost = function(arr){ let arrL=[],arrN=[],count=1; //定義兩個陣列 一個存出現次數 一個存出

Problem A: 零起點學演算法91——找出個數出現次數的那個元素

#include<stdio.h> int main() { int n,a[20],b[20]={0}; while(scanf("%d",&n)!=EOF) { for(int i=0;i<n;i++) {

java找出個數出現次數的那個元素

方法一: import java.util.*; public class TestMain { private static HashMap<String, Integer> map; public static HashMap<Stri

【C語言】簡單思路找個數重複次數的數

#include <stdio.h> int main() {     int a[1024];     int b[1024] = {0};                           //初始化每個數出現一次          int i = 0;

找出個數重複次數的數

使用map映色表,通過引入map表來記錄每一個元素出現的次數。 bool find_most_frequency_number(int *arr, int size, int &val) { if (a == NULL || size <= 0) r

查詢本書籍出現次數的單詞和他的次數

《飄》 今天我們做一個查詢書籍中出現次數最多的單詞和他的次數。 思路: 首先先進行檔案的讀入,我用的是BufferedReader來進行讀入,我們需要考慮的是如何將讀入的單詞劃分成單獨的個體,還要對其進行計數,我們很自然地想到了用Map方法來進行計數,一個key值對應著一個value。 ①讀入文件的第一行 ②

C語言--查詢出現次數的元素

次數 最大值 定義 style 取出 ++ main print 存儲 查詢數組中出現次數最多的元素#include <stdio.h> #include <malloc.h> #include <stdlib.h> int max_c

個數出現次數超過n/3的數(c++實現)

題目要求如下: 令A是一個長度為n的正整數序列。試設計一個時間 和空間複雜度分別為O(n)和O(1) 的演算法,判斷A中 是否存在這樣的元素x,x在序列中出現次數超過n/3。 若存在這樣的x,則將其輸出。 實現思路: 、BM(Boyer-Moore Majority V

獲取數出現次數的數據及出現次數

family pan null spa ply 數據 PE urn on() Array.prototype.show=function(){ let _this=this; let arrs=[]; _this.forEa

Java統計篇文章出現次數的漢字或英文單詞 又出現次數的統計

思想是用到了Map集合的鍵唯一性儲存漢字或者單詞,單詞的獲取通過正則獲取: 統計類: import java.util.ArrayList; import java.util.Map; import java.util.Set; import java.util.Tree

統計篇文章出現次數的前k個詞,文章一行

      應該考慮檔案大小和詞的多少,有一個1G大小的一個檔案,裡面每一行是一個詞,詞的大小不超過16位元組,記憶體限制大小是1M。返回頻數最高的100

linuxsort統計檔案出現次數的前10個單詞

例項 cat logt.log|sort -s -t '-' -k1n |awk '{print $1;}'|uniq -c|sort -k1nr|head -100 使用linux命令或者shell實現:檔案words存放英文單詞,格式為每行一個英文單詞

獲取在個數出現的字符及其所在的位置

blog 數組 body asc i++ cnblogs attr 次數 獲取 獲取在一個數組中出現最多的字符、個數及其所在的位置 <!DOCTYPE html> <html> <head> <title>一個數組中,出現

繼續對上頁的ecah進行 優化,求個數的和,,獲取陣列的元素,3

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style t

如何統計本英文書(比如簡愛)出現次數的前1000個單詞

如何統計一本書中出現最多的前1000個單詞,其實只要處理好新單詞的儲存,已經出現單詞個數的統計,和根據出現次數的排序,就基本完成了這個專案。 思路:1、從檔案中依次讀取一個個字元,如果是字母字元就放到一個字元陣列中,當讀取的字元是空格或者標點符號時,則已經讀取的字串視為一個單詞,將其儲存起來。&

查詢陣列出現次數的元素

1.查詢陣列中每一個元素出現的次數 var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice']; var countedNames = names.re

查詢字串出現次數的字母和出現次數. 示例: var str =" fdadffddfdffj"; ====> 出現次數的是f, 出現了 6 次;

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <script> var a =

查詢個數第二大的數的下標並輸出

這幾天筆試中有一個題目,讓輸出一個數組中第二大的數的下標。第一想法就是排序,然後輸出第二大的陣列的下標,但是排序的話會出現交換,原數的下標也會變。所以樓主想把原陣列複製一份儲存下來,然後對原陣列排序,找出第二大的數,與複製的陣列比較,然後輸出下標。這裡有一個問題,如果直接寫

統計字串出現次數的字元及個數

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-eq

找出陣列出現次數的那個數——主元素問題

 方法一:以空間換時間,可以定義一個計數陣列int count[100],用來對陣列中數字出現的次數進行計數(只能針對陣列中數字的範圍1~1000),count陣列中最大的元素對應的下標,即為出現次數最多的那個數。程式碼如下: #include <iostream&g