1. Climbing Stairs
https://leetcode.com/explore/interview/card/top-interview-questions-easy/97/dynamic-programming/569/
Dynamic Programming:
(There are also other methods exists such as recursion, but only apply DP this time)
class Solution {public:int climbStairs(int n) { //basically a fibonacciif(n == 1)return 1;int curr = 1;int prev = 0;int next = 1;for(int i = 0; i < n; i++){curr = prev + next;prev = next;next = curr;}return curr;}};
2. Best Time to Buy and Sell Stock
https://leetcode.com/explore/interview/card/top-interview-questions-easy/97/dynamic-programming/572/
Dynamic Programming:
class Solution {public:int maxProfit(vector<int>& prices) { //break the problem into//1. find the minimum value and//2. find the maximum profit that related to the minimum valueint min_val = INT_MAX;int max_pro = 0;for(int i = 0; i < prices.size(); i++){if(prices[i] < min_val)min_val = prices[i];if((prices[i] - min_val) > max_pro)max_pro = prices[i] - min_val;}return max_pro;}};
3. Maximum Subarray
https://leetcode.com/explore/interview/card/top-interview-questions-easy/97/dynamic-programming/566/
Dynamic Programming:
class Solution {public:int maxSubArray(vector<int>& nums) {if(nums.size()==1)return nums[0];int max_sum = nums[0];int cur_sum = 0;int n = nums.size();for(int i = 0; i < n; i++){cur_sum += nums[i];max_sum = max(max_sum, cur_sum);//update the maximum sumcur_sum = max(cur_sum, 0);//we only need the maximum sum in subarrays, so this is a kind of reset if the sum is negative//if cur_sum >= 0, the array before is worthy to be added}return max_sum;}};
