وقتشه که بریم سراغ تحلیل و معرفی راه حل بهینه!🔥
💡ایده کلیدی راهحل بهینه:
به جای اینکه برای هر عنصر، کل آرایه رو از نو ضرب کنیم (راه حل O(n^2) )، میتونیم با دو بار پیمایش کل آرایه، به جواب برسیم. این الگوریتم هوشمندانه از حاصلضربهای پیشوندی و پسوندی (Prefix & Suffix Products) استفاده میکنه:
▪️پیمایش اول (از چپ به راست): یک آرایه کمکی میسازیم که در هر خانه i، حاصلضرب تمام اعداد قبل از i ذخیره شده.
▪️پیمایش دوم (از راست به چپ): حاصلضرب تمام اعداد بعد از i را در مقدار فعلی خانه i ضرب میکنیم.
✅اینطوری با پیچیدگی زمانی O(n) و حافظه اضافی O(n) (یا حتی O(1)) به جواب میرسیم!
🥇تبریک به آقای امیررضا فرهمند که تونستن از بین همه دوستانی که زحمت کشیدن، بهترین الگوریتم رو ارائه بدن.🎉
# بهینه ترین الگوریم با پیچیدگی زمانی O(n) و حافظه O(1)
def product_except_self(nums):
n = len(nums)
if n == 0:
return []
# 1. مقدار اولیه آرایه جواب را با حاصلضربهای پیشوندی پر میکنیم
result = [1] * n
prefix_product = 1
for i in range(n):
result[i] = prefix_product
prefix_product *= nums[i]
# 2. با حاصلضربهای پسوندی، نتیجه را نهایی میکنیم
suffix_product = 1
for i in range(n - 1, -1, -1):
result[i] *= suffix_product
suffix_product *= nums[i]
return result
❕یادمون باشه، هدف این چالشها تقویت ذهن و لذت بردن از حل مسئله است، نه فقط رسیدن به جواب!
این فقط یه چالش آزمایشی از طرف ما بود.
منتظر چالشهای جذاب بعدی باشید! 🚀
#الگوریتم_برتر / #پایتون / #تحلیل_کد / #RaziCSA
{ @RaziCSA }