رقصنده با کد
782 subscribers
1.69K photos
850 videos
207 files
666 links
Here are some interesting things I've come across during my learning process. That's it. Admin ID:
@alithecodeguy
Download Telegram
Media is too big
VIEW IN TELEGRAM
What is a sorting algorithm?
#algorithm @alithecodeguy
تفاوت sortingهای مختلف
#algorithm
یک سوال الگوریتمی که توی مصاحبه پرسیدن: (فارسی سازی شده)

صورت مسئله به زبان ساده:
• یه سری کارت داریم که از چپ به راست چیده شدن، مثل:
[-2, 4, -3, 5, -1, 2]
• روی هر کارت یه عدد نوشته شده. می‌تونه منفی یا مثبت باشه.
• ما از چپ به راست باید کارت‌ها رو انتخاب کنیم.
• با برداشتن هر کارت، عدد اون به “قدرت فعلی” ما اضافه میشه.
• قدرت اولیه ما: 0
• ولی یه قانون مهم داریم:
قدرت ما در هیچ لحظه‌ای نباید صفر یا منفی بشه. اگر بشه، بازی تمومه.

🎯 هدف:

ما باید بیشترین تعداد کارت رو انتخاب کنیم، طوری که قدرت‌مون همیشه بیشتر از صفر باقی بمونه.

🔍 مثال:
فرض کن کارت‌ها این باشن
کارت‌ها: [3, -2, 4, -5, 2, -1]
قدرت اولیه: 0

قدم‌به‌قدم بریم جلو:
1. کارت 3 → قدرت 0+3 = 3 → خوبه
2. کارت -2 → قدرت 3-2 = 1 → هنوز مثبت
3. کارت 4 → قدرت 1+4 = 5
4. کارت -5 → قدرت 5-5 = 0 مجاز نیست → نمی‌تونیم برداریم
5. کارت 2 → قدرت 5+2 = 7
6. کارت -1 → قدرت 7-1 = 6

پس مجموعاً 5 تا کارت برداشتیم و زنده موندیم. 🎉

برای اینکه بتونیم همیشه قدرت‌مون رو حفظ کنیم، یه روش هوشمند داریم:
1. از چپ به راست حرکت می‌کنیم.
2. هر کارتی که باعث نشه قدرت صفر یا منفی بشه → برمی‌داریم.
3. اگه کارت منفی بود، توی یه لیست ذخیره می‌کنیم.
4. اگه در آینده قراره قدرت‌مون منفی بشه:
• چک می‌کنیم بین کارت‌های منفی که قبلاً برداشتیم، آیا یکی هست که از کارت فعلی بدتر (منفی‌تر) باشه؟
• اگه بله → اون کارت بدتر رو حذف می‌کنیم، کارت فعلی رو می‌گیریم.

توجه : این روش minHeap واقعی نیست


function maxCardCount(cards) {
let power = 0;
let count = 0;
const minHeap = [];

for (let card of cards) {
if (power + card <= 0) {
// Can't pick this card directly — check if we can replace a more negative one
if (card < 0 && minHeap.length > 0 && minHeap[minHeap.length - 1] < card) {
// Replace the most negative card
const removed = minHeap.pop();
power -= removed;
minHeap.push(card);
power += card;
// count stays the same
minHeap.sort((a, b) => a - b); // keep heap sorted
}
continue; // skip if we can’t afford the card
}

// Safe to pick the card
power += card;
count++;

if (card < 0) {
minHeap.push(card);
minHeap.sort((a, b) => a - b);
}
}

return count;
}


#interview #algorithm