查詢一個數組中出現次數最多的值(長度為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
linux中sort(統計檔案中出現次數最多的前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