Cách đếm số lần xuất hiện phần tử trong mảng?

hi there ! anh/chị có thể gợi ý giúp em vấn đề này không ạ ?

=> cho dãy A 7;7;4;5;7;9;2;5 sẽ cho ra dãy B 7;4;5;9;2 ( số xuất hiện nhiều lần chỉ tính 1 )

Cách làm của em như này :
dùng for lớn cho chạy từ đầu Dãy A là số 7, cho đến số 5. ví dụ đang ở vị trí số 2 thì thì cho vòng for nhỏ chạy từ đầu dãy A đến số 9, nếu 2 xuất hiện trong khoảng đó thì continue, còn nếu không thì thêm 2 vào B. do B không đếm được nên dùng ArrayList .

ý tưởng e như vậy nhưng code không ra kết quả đúng ạ, mong được giúp đỡ

em tìm được đoạn code C này ai đó dịch ra java giúp em với

    #include <iostream>
using namespace std;
 
const int MAX = 1e6;
int cnt[MAX];
 
int main(){
int n;
do{
    cout << "\nNhap n = ";
    cin >> n;
}while(n < 1);
int a[n];
for(int i = 0; i < n;i++){
    do{
        cout << "\nNhap a[" << i << "] = ";
        cin >> a[i];
    }while(a[i] < 0);
}
for(int i = 0;i < MAX; i++) cnt[i] = 0;
for(int i = 0; i < n;i++){
    cnt[a[i]]++;
}
for(int i = 0;i < MAX; i++){
    if(cnt[i] > 0){
        cout << "Gia tri " << i << " xuat hien " << cnt[i] << " lan!\n";
    }
}
}

Ý tưởng đúng mà code sai thì chỉ do code chứ còn do cái gì :smile:. Không show code ra sao giúp?
Ngôn ngữ nào cũng có cách của nó, có ý tưởng là được, không cần phải convert code làm gì.

Code ứng dụng thực tế:

String A = "7;7;4;5;7;9;2;5";
String B = String.join(";", Arrays.stream(A.split(";")).distinct().collect(Collectors.toList()));

Hoặc để dùng với list số:

List<Integer> A = ..............
List<Integer> B = A.stream().distinct().collect(Collectors.toList());

Code tường minh dùng để giảng dạy:

public static<T> ArrayList<T> listDistinct(T... input)
{
    ArrayList<T> output = new ArrayList<>();
    for(T number : input)
        if (!output.contains(number)
            output.add(number);
    return output;
}
5 Likes

Cái này giống loại bỏ phần tử trùng nhau.

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?