Хувьцаа аваад зараад яаж хамгийн их ашиг олох вэ ?

Бид энэхүү блогоор 🌳🌳 амазоны 🌳🌳 ярилцлаганд ирдэг бодлогыг бодох болно

Асуудал:

Өдрүүдийн хувьцааны ханшийг хадгалсан array байя . Та хувьцаа аваад дараагийн өдрүүдэд зарна. Нэг өдөрт нэг л хувьцаа авах юмуу зарах боломжтой . Та хэдэн ч удаа худалдаад зарах боломжтой бол хамгийн ихдээ ямар ашиг хийх вэ ?

Жишээ:

Input: arr[] = [100, 180, 260, 310, 40, 535, 695]
Output:865
Explanation:Та хувьцааг 0 дэхь өдөр аваад 3 дахь өдөр заран 310-100=210 ашиг хийнэ . Дараа нь 4 дэхь өдөр аваад 6 дахь өдөр заран 695 - 40 =655 ашиг хийнэ . Нийт ашиг 865 болно

Шийдэл:

Гол санаа: Дараалсан өсөлттэй хэсгүүдийн хамгийн бага болон хамгийн их тооны зөрөөний нийлбэрүүд нийт хийх боломжтой ашиг болно. arr[]=[100, 180, 260, 310, 40, 535, 695] үед 100 - 310 , 40 - 695 хүртэл дараалан өсж байна . arr[]=[4, 2, 2, 2, 4] үед 2 - 4 хүртэл дараалан өсж байна .

  1. Бид min хэмээх хувьсагчид дараалсан хэсэг болгоны бага утгыг хадгалан явна . Хэрвээ min ээс бага утга гарж ирвэл манай өсөх дараалал байхгүй тул энэ өсөх дараалал хүртэлх боломжтой ашиг(maxProfit) ийг profit дээр нэмэн min ийн утгыг өөрчилнө .

  2. Хэрвээ min ээс их утга байвал энэхүү элемент өмнөх элементээс буурсан эсвэл өссөн байх магадлалтай . Тиймээс бид үүнийг else дотор тодорхойлж байна .

    • Хэрвээ өмнөх элементээс бага бол манай дараалал байхгүй гэсэн үг . Энэ тохиолдолд ашгаа нэмэн шинэ дараалал эхэлж байна хэмээн бодно .
    • Хэрвээ өмнөх элементээс их бол энэ дарааллын боломжит ашгаа бодно .
class Solution {
    int stockBuySell(int arr[]) {
        // code here
        int profit =0;
        int min=arr[0];
        int maxProfit=0;
        int length=arr.length;
        for(int i=1;i<length;i++){
            if(arr[i]<min){
                min=arr[i];
                profit+=maxProfit;
                maxProfit=0;
            }
            else {
               if(arr[i]<arr[i-1]){
                   min=arr[i];
                    profit+=maxProfit;
                maxProfit=0;
               }
               else {
                   maxProfit=Math.max(maxProfit,arr[i]-min);
               }
            }
        }
        return profit+maxProfit;
    }
}

Төстэй блогууд

Хоёртын хайлт

July 18, 2025

Binary search гэж юу вэ ? ...

Read more