حذف عناصر تکراری از آرایه و vector - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

حذف عناصر تکراری از آرایه و vector

0 امتیاز
سلام. چطوری می تونم عناصر تکراری را از آرایه و vector حذف کنم .

ممنون
سوال شده آذر 26, 1392  بوسیله ی نظری (امتیاز 62)   5 10 13
دوباره تگ گذاری شد اردیبهشت 11, 1393 بوسیله ی BlueBlade

2 پاسخ

+3 امتیاز
 
بهترین پاسخ
1- چند روش وجود داره اگه شما میدونین که آرایه شما مثلا A دارای چه بازه ای از داده ها هستن و همچنین اعداد اونها صحیح هست مثلا از 0 تا 100. به راحتی میتونین یه بار آرایه رو پیمایش کنین و با ایجاد یک ارایه مثلا B از صفر تا 100 با مقادیر صفر، بر اساس اینکه در A چه اعدادی هست خانه متناظر آن را در B یکی اضافه کنید. در آخر وقتی پیمایش شما تمام شد. میتونین این بار آرایه B را پیمایش کنین و خانه هایی که اعدادی بزرگتر یا مساوی یک دارند(یعنی حداقل یکبار وجود داشته اند) را در آرایه مورد نظر انتساب میدین. این طوری عناصری که وجود نداشتند در آرایه نهایی نمی آیند و عناصر تکرای هم تنها یکبار می آیند. مثلا اعداد ما در بازه صفر تا 10 هستند

0 5 3 4 5 5 6 4 7 2 1 9 9 A

1 1 1 1 2 3 1 1 0 2 0 B

پس اون عناصری در B که بیشتر یا مساوی یک هستند مدنظر قرار میکیرند (خوبیه این روش اینه که مرتبش n هست)

2- میتونین یه ارایه B به اندازه بازه داده هاتون تعریف کنین و عناصر اونو صفر کنین و یکی یکی عناصر آرایه A تونو بخونین بعد بیاین ببینین اکه متناظرش در ارایه B صفر بود اونو بنویسین در یه ارایه دیگه و خونه متناظر B رو یک کنین که به این معناس قبلا این عدد اومده ودومرتبه نیاد اگرم که متناظرش در B صفر نبود ازش رد میشین.

(خوبیه این روش اینه که مرتبش n هست)

3- اگه بازه اعدادتونو نمیدونین یا اعشاری هستن میشه اول داده ها رو مرتب کرد و بعدش با یه بار پیمایش و مقایسه اعداد کناری تکراریارو حذف کرد.

4- یه راهکارم اینه از اول از ارایه یا بردار استفاده نکنین و بجاش از ساختارهایی استفاده کنین که عناصر یکتا دریافت میکنن و اگه تکراری بدی خودشون حذف میکنن.
پاسخ داده شده آذر 26, 1392 بوسیله ی mahdi (امتیاز 392)   7
انتخاب شد آذر 27, 1392 بوسیله ی BlueBlade
+1 امتیاز

کدش تو C:

int a[20];
	for (int i=0; i < 20;i++)
		a[i] = rand() %10;

	sort(a,a+20);

	int b[20];
	int index = 0;
	b[index] = a[0];
	
	for (int i=1; i < 20;i++)
		if (a[i] != b[index])
			b[++index] = a[i];


	for (int i=0; i < index;i++)
		cout << b[i] << endl;

 

کدش تو C++:

	vector<int> a(20);
	for (int i=0; i < 20;i++)
		a[i] = rand() %10;

	sort(a.begin(),a.end());

	int index = 0;
	a.erase(unique(a.begin(),a.end()),a.end());

	for (int i=0; i < a.size();i++)
		cout << a[i] << endl;

 

پاسخ داده شده آذر 26, 1392 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
...