Best Time to Buy and Sell Stock
تحصل على سعر سهم واحد على امتداد عدة أيام، بسعر واحد لكل يوم. يمكنك شراء سهم في يوم ما وبيعه في يوم لاحق. الربح هو سعر البيع مطروحًا منه سعر الشراء، وتريد تحقيق أكبر ربح ممكن. إذا كانت كل صفقة ستؤدي إلى خسارة، فلا تتداول ببساطة ويكون ربحك 0.
خذ الأسعار [7, 2, 5, 9, 1, 4]. الشراء بسعر 2 في اليوم 1 والبيع بسعر 9 في اليوم 3 يحقق ربحًا قدره 7، ولا يحقق أي زوج آخر من الأيام ربحًا أكبر. قد يبدو الشراء بسعر 1 في اليوم 4 مغريًا لأنه أرخص يوم، لكن سعر البيع في اليوم اللاحق الوحيد هو 4، لذا لا تحقق هذه الصفقة سوى ربح قدره 3.
تجربة كل زوج من الأيام تنجح، لكنها بطيئة جدًا لقوائم الأسعار الطويلة. يمكنك فعل ذلك بمرور واحد على الأيام بدلًا من ذلك. إذا بعت اليوم، فأفضل يوم للشراء هو أرخص يوم حتى الآن، لذا احتفظ بأدنى سعر أثناء تقدمك. أفضل ربح لليوم هو سعر اليوم مطروحًا منه أدنى سعر، والإجابة هي أكبر قيمة من هذه الأرباح.
اكتب دالة باسم maxProfit تستقبل قائمة من الأعداد الصحيحة prices، حيث يمثّل prices[i] سعر السهم في اليوم i، وتُرجع أكبر ربح يمكنك تحقيقه بشراء السهم في يوم وبيعه في يوم لاحق. إذا لم تحقق أي صفقة ربحًا، فأرجع 0.
القيود: 1 ≤ prices.length ≤ 10^5، 0 ≤ prices[i] ≤ 10^4.
الدالة
- arg1integer-array
- تُرجعinteger
أمثلة
- المدخلات
- arg1 = [7, 2, 5, 9, 1, 4]
- المخرجات
- 7
- المدخلات
- arg1 = [9, 7, 4, 3, 1]
- المخرجات
- 0
+12 اختبارات مخفية عند الإرسال
تلميحات
افتحها واحدًا تلو الآخر. كل تلميح يكشف أكثر قليلًا.
يأتي البيع دائمًا بعد الشراء. اختر يومًا للبيع: أي يوم للشراء يحقق أكبر ربح منه؟
في يوم بيع معيّن، يكون أفضل يوم للشراء هو اليوم الأقل سعرًا قبله. لا تحتاج إلى البحث عن ذلك اليوم مجددًا في كل مرة إذا تذكّرته وأنت تتقدّم.
تتبّع الأيام بالترتيب واحتفظ برقمين: أدنى سعر حتى الآن وأفضل ربح حتى الآن. في كل يوم، قارن سعر اليوم مطروحًا منه أدنى سعر بأفضل ربح، ثم حدّث أدنى سعر.
شرح كامل لهذه المسألة قادم قريبًا.
مسائل مشابهة
مسائل تعتمد على الأفكار نفسها. حلّ اثنتين أو ثلاث منها يثبّت النمط.
Python
def maxProfit(prices):
# اكتب الكود هناالحالة 1
الحالة 2
المدخلات
arg1 = [7, 2, 5, 9, 1, 4]
المتوقع
7