我有一個int數組:找到元件的頻率在Java陣列
{1,2,4,2,3,5,6,4,3}
如何找到陣列元件等1=1,2=2,3=2,4=4..
的頻率。我需要一個類,我可以傳遞我的數組並返回一個給出數組元素數的數組。例如: - array{[0]=1,[1]=2,[2]=3,[3]=4..}
(對於上面的示例數組);
我有一個int數組:找到元件的頻率在Java陣列
{1,2,4,2,3,5,6,4,3}
如何找到陣列元件等1=1,2=2,3=2,4=4..
的頻率。我需要一個類,我可以傳遞我的數組並返回一個給出數組元素數的數組。例如: - array{[0]=1,[1]=2,[2]=3,[3]=4..}
(對於上面的示例數組);
你要做的幾件事情:
如果這是以一種簡單的方式完成的,它可能只是從傳入的數組中讀取元素並打印出最終結果。
沒有給它遠離這裏是一個很好的起點:
int[] array = {1,2,4,2,3,5,6,4,3};
public int[] (array){
//need to perform a sort...or a search
//after searching check for matches,
//sorting could make performing comparisons more efficient
//not all searches/sorts are created equal.
int[array.length] result += {"["+numberChecked+"]="+freqOccurred};
return result;
}
此代碼還沒有被編譯,以便把它更像僞代碼。目的是讓你思考如何達到預期的目標。一個Java包可能已經存在,可以檢查數組中的頻率元素,但這是您最可能尋找的。祝你好運。
我有計數元件的頻率在Java陣列
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class ItemCount {
public static void main(String[] args)
{
try{
int count=1,index=1;
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter the Size of array : ");
int size=Integer.parseInt(br.readLine());
System.out.print("Enter the Elements of array : ");
int arr[]=new int[size];
for(int i=0;i<arr.length;i++)
{
System.out.print("arr["+i+"] : ");
arr[i]=Integer.parseInt(br.readLine());
}
System.out.print("Sorted Array is :");
SortingArray.sortDescendind(arr);
for(int i=0;i<arr.length;i++)
{
System.out.println("arr["+i+"] : "+arr[i]);
}
for(int i=0;i<arr.length;)
{
count=1;
for(index=i+1;index<arr.length;index++)
{
if(arr[i]==arr[index])
{
count++;
}
else{
break;
}
}
System.out.println(""+arr[i] +"----> "+count);
i+=count;
}
}catch(Exception ex)
{
ex.printStackTrace();
}
}
}
溶液///你可以選擇陣列中的任何分選方法----> SortingArray.sortDescendind(ARR)
解決方案的時間複雜度是O(n^2),這不是最優的。 – Hengameh
@hengameh,只是一個猜測,但不會最好的時間複雜度是O(n),因爲你必須至少讀一次數組? @JavaFun,** tl; dr **但最快的方式來做(我認爲)將是一個二維計數數組並讀取一次原始數組。在讀取數組時,每次遇到數組中的新元素時,向計數數組中添加'{element,occurrences}',並且如果遇到舊元素,只需將其添加到其出現位置 – Lightfire228
在Java 8可以做到這一點
Map<Integer, Long> freq = Arrays.stream(array).boxed().
collect(Collectors.groupingBy(Integer::intValue, Collectors.counting()));
Isn' t足夠使用'Function.identity()'而不是'Integer :: intValue'?在這種情況下,我們並不需要取消整數整數 –
@Anton是的,它應該工作,而我不知道它節省了多少。 –
如果指定的數組元素的範圍和限制在陣列大小,最好的辦法是使用哈希映射。 T(n)= O(n),輔助空間= O(n)。
public static void findCount3(int[] a){
Map<Integer, Integer> hm = new HashMap<Integer, Integer>();
for(int i = 0; i < a.length; i++){
if(!hm.containsKey(a[i])){
hm.put(a[i], 1);
}else{
hm.put(a[i], hm.get(a[i])+1);
}
System.out.println(hm);
}
爲什麼首先需要循環? – ankit
class MapTest
{
public static void main(String args[]){
HashMap<Integer,Integer> h = new HashMap<Integer,Integer>();
int arr[] = new int[]{2,2,3,3,5,6,7,9,9,0};
for(int i=0; i<arr.length; i++){
if(h.containsKey(arr[i])){
h.put(arr[i], h.get(arr[i]) + 1);
} else {
h.put(arr[i], 1);
}
}
System.out.println(h);
}
}
import java.util.*;
class Findfreqarray
{
public static void main(String args[])
{
int t, i, j, len, count=0;
Scanner in = new Scanner(System.in);
System.out.println("Enter number of elements to insert in an array: ");
len = in.nextInt();
int[] arr = new int[len];
System.out.println("Enter elements to insert in an array: ");
for(i=0;i<len;i++)
{
t = in.nextInt();
arr[i] = t;
}
System.out.println("\n");
for(i=0;i<len;i++)
{
count=1;
for(j=i+1;j<=len-1;j++)
{
if(arr[i]==arr[j] && arr[i]!='\0')
{
count++;
arr[j] = '\0';
}
}
if(arr[i]!='\0')
{
System.out.println(arr[i] + " is " + count + " times.\n");
}
}
}
}
聞起來像做作業一樣有 –
你[試圖]什麼(http://mattgemmell.com/2008/12/08/what-have-you-tried/)? – higuaro
'Collections.frequency(Arrays.asList(...),X)' – oldrinb