給定乙個int陣列,裡面存在重複的數值,如何找到重複次數最多的數值呢?
這是在某社群上有人提出的問題,我想到的解決方法是分組。
1、先對陣列中的所有元素進行分組,那麼,重複的數值肯定會被放到一組中;
2、將分組進行排序,排序條件是分組中的元素個數;
3、元素數量最多的那個分組中的數值就是重複次數最多的。
基於以上思路,可以寫出以下**:
// 示例陣列,90重複4次,1重複2次,3重複3次在示例陣列中,1出現了兩次,3出現了三次,15出現兩次,90出現四次。顯然,重複次數最多的是90。int arr = ;
/** 先將陣列各元素進行分組,
* 然後將每個組中的元素個數按降序排列
*/var res = from n in arr
group n by n into g
orderby g.count() descending
select g;
// 分組中第乙個組就是重複最多的
var gr = res.first();
foreach (int x in gr)
",x);
}
使用linq語句將源陣列中的所有元素,按照元素自身進行分組,然後用count方法計算每個組中的元素個數,並按降序排列。得到的結果中的第乙個分組,其裡面的元素自然是重複次數最多的了。
故輸出結果為:
**:
求陣列中重複次數最多的元素
例如 陣列a 元素2 3 7 8各出現1次,1出現兩次,5出現4次,則重複次數最多的元素為5.定義乙個陣列int cnt max 將其元素全部初始化為0。然後遍歷陣列a,執行cnt a i 操作。最後在cnt陣列中找最大的數,對應的數即為重複次數最多的數。示例如下 以空間換時間,索引法 int ma...
求陣列中反覆次數最多的元素
比如 陣列a 元素2 3 7 8各出現1次。1出現兩次。5出現4次,則反覆次數最多的元素為5.定義乙個陣列int cnt max 將其元素所有初始化為0。然後遍歷陣列a。執行cnt a i 操作。最後在cnt陣列中找最大的數。相應的數即為反覆次數最多的數。示比例如以下 以空間換時間,索引法 int ...
java實現列印list中重複次數最多的前n個資料
如 list中有1,3,4,5,1,7,5,3,4,2,1,5,1 當輸入輸入引數n為1時,列印1 當輸入引數n為2時,列印1,5 public void printtopn listnumbers,int n else 將統計出來的map進行處理 map resultmap new hashmap...