1. 程式人生 > >演算法設計與應用基礎-第十一週

演算法設計與應用基礎-第十一週

Best Time to Buy and Sell Stock          

Say you have an array for which the ith element is the price of a given stock on dayi.

If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), design an algorithm to find the maximum profit.

這是一個動態規劃問題,maxpro、minprice是在這一個陣列中不斷更新變化的資料。maxpro=pirce[i]-minprice即可。

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int maxPro = 0;
        int minPrice = INT_MAX;
        for(int i = 0; i < prices.size(); i++){
            minPrice = min(minPrice, prices[i]);
            maxPro = max(maxPro, prices[i] - minPrice);
        }
        return maxPro;
    }
};

House Robber

You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent houses have security system connected and it will automatically contact the police if two adjacent houses were broken into on the same night

.

Given a list of non-negative integers representing the amount of money of each house, determine the maximum amount of money you can rob tonightwithout alerting the police.

對於這類求極值的問題考慮動態規劃Dynamic Programming來解,在一個一位陣列中,其中f[i]表示到i位置時不相鄰數能形成的最大和,當我們到達一個arr[i]時我們考慮該房間和arr[i-1]的前一個房間之和(要求不相鄰)與f[i]進行比較而更新f[i],我們可以得到遞推公式f[i] = max(num[i] + dp[i - 2], dp[i - 1]), 由此看出我們需要初始化f[0]和f[1],其中f[0]即為arr[0],f[1]此時應該為max(arr[0], arr[1])

class Solution {
public:
    int rob(vector<int>& nums) {
        const int n = nums.size();
        if (n == 0) return 0;
        if (n == 1) return nums[0];
        if (n == 2) return max(nums[0], nums[1]);
        vector<int> f(n, 0);
        f[0] = nums[0];
        f[1] = max(nums[0], nums[1]);
        for (int i = 2; i < n; ++i)
            f[i] = max(f[i-2] + nums[i], f[i-1]);
        return f[n-1];
    }
};


相關推薦

演算法設計應用基礎-

Best Time to Buy and Sell Stock           Say you have an array for which the ith element is the price of a given stock on dayi. If you

演算法設計分析》作業

《演算法設計與分析》第十一週作業 標籤(空格分隔): 課堂作業 文章目錄 《演算法設計與分析》第十一週作業 @[toc] 題目概要 思路 具體實現 心得 原始碼:

演算法設計分析》作業

《演算法設計與分析》第十二週作業 標籤(空格分隔): 課堂作業 文章目錄 《演算法設計與分析》第十二週作業 @[toc] 題目概要 思路 具體實現 心得 原始碼:

演算法設計分析》作業

《演算法設計與分析》第十週作業 標籤(空格分隔): 課堂作業 文章目錄 《演算法設計與分析》第十週作業 @[toc] 題目概要 思路 具體實現 心得 原始碼:

演算法設計分析基礎 五章謎題

習題5.1 11.Tromino謎題 Tromino是一個由棋盤上的三個1×1方塊組成的L型骨牌。我們的問題是,如何用Tromino覆蓋一個缺少了一個方塊的2n×2n棋盤。除了這個缺失的方塊,Tromino應該覆蓋棋盤上的所有方塊,Tromino可以任意轉向但不能有重疊。 為此問題

演算法設計分析基礎 四章謎題

習題4.1 1.擺渡的士兵 n個士兵組成的分隊必須越過一條又深又寬又沒有橋的河。他們注意到在岸旁有兩個12歲大的小男孩在玩划艇。然而船非常小,只能容納兩個男孩或一名士兵。怎樣才能讓士兵渡過河,並且留下兩個男孩操縱這條船?這條船要在岸與岸之間橫渡多少次? 解答:每次只能容納一名士兵,所以士

演算法設計分析基礎 三章謎題

習題3.1 6.四格拼板 四格拼板是由4個1*1的正方形組成。下面是5種類型的四格拼板: 分別利用以下四格拼板,看看是否有可能在不重疊的情況下完全覆蓋一個8*8的棋盤。 a. 直線拼板   可以,長和寬能被8整除 b. 方形拼板   

演算法設計分析基礎 六章謎題

習題6.1 9.數字填空 給定n個不同的整數以及一個包含n個空格的序列,每個空格之間事先給定有不等(>或<)符號,請設計一個演算法,將n個整數填入這n個空格中並滿足不等式約束。例如,數4,6,3,1,8可以填在這樣的5個空格中: 解答:將n個正整數從小到大排序,然後將數

演算法設計優化程式設計 講 Subway

Subway Problem Description jiefangxuanyan and yiyi cat are universally acknowledged model couples(配偶). Once jiefangxuanyan has

演算法設計分析基礎 七章謎題

習題7.1 6. 祖先問題要求在一棵給定的n頂點二叉樹中,確定一個頂點u是否是頂點v的祖先。設計一個屬於O(n)的輸入增強演算法,使我們可以在常量時間內獲得樹的每一對頂點的足夠資訊,來對問題求解。 分析:一個頂點u是頂點v的祖先,當前僅當先序遍歷u在v的前面,並且後序遍歷u在v的後面。第

【深度學習框架Caffe學習應用

1.車輛檢測實踐:使用Caffe訓練的深度學習模型做目標檢測——以車輛檢測為例 有關檔案都放在以下資料夾中: 對vehicle_detetc.cpp進行編譯: 編譯之前,需要修改一下程式碼中的檔

演算法設計分析作業題】:20. Valid Parentheses

題目 C++ solution class Solution { public: bool isValid(string s) { stack<char> cstack; for (int i = 0; i < s.si

Python基礎天——內置函數的補充、內置函數lambda、遞歸

book ice args enc blog urn close 定義 rand 一、拾遺 1、生成器表達式形式的多個函數之間的協同工作。 例:做一包子吃一個包子 優點:更省內存。 以上例子的原理:      重點★★★★★ 源代碼: import time impo

2018-2019-1 20165330 《資訊安全系統設計基礎學習總結

學習目標 理解虛擬儲存器的概念和作用 理解地址翻譯的概念 理解儲存器對映 掌握動態儲存器分配的方法 理解垃圾收集的概念 瞭解C語言中與儲存器有關的錯誤 學習內容 虛擬儲存器 計算機系統的主存被組織成一個由M個連續的位元組大小的單元組成的陣列,每位元組都有一個唯一的實

演算法設計分析基礎三版】習題1.1 4

演算法設計與分析基礎 習題1.1 4 設計一個[√n]的演算法,n是任意正整數。除了賦值和比較運算,該演算法只能用到基本的四則運算。 程式碼實現: #include "iostream" using namespace std; double n; doubl

Redis 設計實現(章) -- 持久化AOF

written led atom 我們 continue ctc unixtime 機制 warn 概述 Redis除了RDB方式提供持久化外,還提供了AOF的方式,和RDB保存數據庫的鍵值對不同,AOF是記錄數據庫執行的命令來記錄數據庫狀態的。當AOF開始時,Redis

Python 基礎天(閉包和裝飾器初識)

過程 理解 繼續 記錄 turn 格式 -s pos 變量賦值 今日內容: 函數名的應用 閉包 裝飾器的初識 裝飾器的傳參 1.函數名的應用 函數名是函數的名字. 本質:變量,特殊的變量。是函數的內存地址 函數名() 可以執行此函數 (1)單獨打印函數名,可以得到函數的內存

2017-2018-2 20179205《網絡攻防技術實踐》周作業 SQL註入攻擊實踐

tac 原理 HERE 經典的 事先 不存在 編程語言 行數 顯示 《網絡攻防技術與實踐》第十一周作業 SQL註入攻擊與實踐 1.研究緩沖區溢出的原理,至少針對兩種數據庫進行差異化研究 緩沖區溢出原理 ??在計算機內部,輸入數據通常被存放在一個臨時空間內,這個臨時存放的空

java基礎篇 while迴圈和do...while迴圈

1、while 語法: while(判斷條件){ 迴圈操作 }; 執行過程: < 1 >、 判斷 while 後面的條件是否成立( true / false ) < 2 >、 當條件成立時,執行迴圈內的

演算法設計分析——動態規劃()矩陣連乘

動態規劃——Dynamic programming,可以說是本人一直沒有啃下的骨頭,這次我就得好好來學學Dynamic programming. OK,出發! 動態規劃通常是分治演算法的一種特殊情況,它一般用於最優化問題,如果這些問題能夠: 1.能夠分解為規模更小的子問題 2.遞迴的