Tạo lại mảng có nhiều phần tử trong vòng lặp while



Code cho câu i ạ
Vấn đề gặp phải là không tạo lại mảng b đc
Tại sao chạy vòng lặp thì mảng b ko đc khởi tạo lại ạ
E có thử xuất mảng b theo các test thì thấy nó bị chồng chéo lên nhau ạ
Còn khi thử int b với số lượng ptu ít thì đc ạ

Có lẽ chạm giới hạn bộ nhớ, thử giải phóng b trước khi lặp vòng mới.
Bài toán yêu cầu số xuất hiện nhiều hơn 1 lần thôi không phải số xuất hiện nhiều nhất.
Tuy nhiên code này khá là tốt
Bạn đã học đến hash table chưa


Đây là code mới của e ạ
Nhưng bị lỗi time limited
Giúp e cải tiến với al :smiley:

Ý tưởng về unordered_map (hash table) giống với ý tưởng về mảng b[1000000000] của bạn, nhưng các phần tử từ 0 đến 1 tỉ không sắp xếp theo đúng thứ tự từ 0 đến 1 tỉ trong bộ nhớ mà sắp xếp theo 1 thứ tự đặc biệt được quyết định bởi hàm băm. Hash Table có khả năng tự mở rộng tùy theo số phần tử bạn nhập vào.

#include<iostream>
#include<unordered_map>
using namespace std;

int nhapMang(int a[],int n)
{	
	//hash table "b"
	unordered_map<int, int> b;
	
	for(int i=0;i<n;i++)
	{
		cin >> a[i];
		if(!b[a[i]])
			b[a[i]] = 1;
		else return a[i];
	}
	return -1;
}


main()
{
	int a[100000];
	int t, n;
	cin >> t;
	for(int i = 0; i < t; i++)
	{	
		cin >> n;
		int result = nhapMang(a, n);
		if (result != -1) cout << result << endl;
		else cout << "NO" << endl;
	}
}
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?