【LeetCode刷题】-C++-简单-198-打家劫舍

Task:

【LeetCode刷题】-C++-简单-198-打家劫舍_第1张图片

思路:

【解法一:遍历,奇偶分别求和】

思路参考:
【LeetCode刷题】-C++-简单-198-打家劫舍_第2张图片
首先这个题目,要明白的就是,偷了一间房子,那么与之直接相连接的房子是不能再去偷了,不然就要被抓住完蛋了!
那么就要隔间偷,所以首先想到的就是分为奇偶数进行,但是这样有一个问题:
我们的目标是要偷到的金额最大,那么只偷奇数或者只偷偶数就不能保证是最大的:因为可能有一段是奇数家的钱多,有一段是偶数家的qia多,所以需要找准一个时机。当这一段的最优解没有另外一边好的时候,就把好的那边的复制过来!
代码:

class Solution {
public:
    int rob(vector& nums) {
        if (nums.size() == 0 ) return NULL;
        int sumOdd = 0; // 奇数
        int sumEven = 0; // 偶数
        for (int i=0; i

提交结果:
【LeetCode刷题】-C++-简单-198-打家劫舍_第3张图片
【解法二:动态规划】
动态规划的不太懂,我都不清楚什么是动态规划,今天大概看一下:
代码:

class Solution {
public:
    int rob(vector& nums) {
        if(nums.size()==0) return 0;
        if(nums.size()==1)
            return nums[0];
        if(nums.size()==2)
            return max(nums[0],nums[1]);
        nums[2]=nums[0]+nums[2];
        if(nums.size()==3)
            return max(nums[1],nums[2]);
        for(int i=3;i

提交结果:
【LeetCode刷题】-C++-简单-198-打家劫舍_第4张图片
可以看出来,基于动态规划的方法,时间复杂度明显要好很多!

你可能感兴趣的:(C/C++学习,leetCode,LeetCode刷题系列)