【LeetCode】跳水板
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                【LeetCode】跳水板
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                題目要求
思路
這道題的歸類是記憶化搜索,我開始看到這題馬上就想打一個DP,解完以后看了看題解,發(fā)現了一種好的思路。
用這種思路,我在排除兩種特例(即k==0k==0k==0和shorter==longershorter==longershorter==longer)之后,定義一個長度為k+1k+1k+1的vector,利用式子nums[i]+=k?shorter+i?differnums[i] += k*shorter + i*differnums[i]+=k?shorter+i?differ,循環(huán)一遍就能達到O(n)O(n)O(n)。
提交代碼
class Solution { public:vector<int> divingBoard(int shorter, int longer, int k) {if (k == 0) {return vector<int> {};}if (shorter == longer) {return vector<int> {shorter*k};}vector<int> nums(k+1);int differ = longer-shorter;for (int i = 0; i <= k; i++) {nums[i] += k*shorter + i*differ;}return nums;} };完整代碼
#include <iostream> #include <vector>using namespace std;class Solution { public:vector<int> divingBoard(int shorter, int longer, int k) {if (k == 0) {return vector<int> {};}if (shorter == longer) {return vector<int> {shorter*k};}vector<int> nums(k+1);int differ = longer-shorter;for (int i = 0; i <= k; i++) {nums[i] += k*shorter + i*differ;}return nums;} };int main() {Solution solution = Solution();vector<int> nums = solution.divingBoard(1, 2, 3);cout << "[";int i;for (i = 0; i < nums.size()-1; i++) {cout << nums[i] << ",";}cout << nums[i] << "]" << endl;return 0; }總結
以上是生活随笔為你收集整理的【LeetCode】跳水板的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 【算法分析与设计】实验 分治算法解决中位
 - 下一篇: 【操作系统】大内核和微内核的比较