目录

一:打家劫舍

二:打家劫舍II

三:打家劫舍III


一:打家劫舍

解题思路:

该题用动态规划求解,简单易懂

1,抢劫的房屋数少于两个情况(包含两个),如果就一个房屋,则肯定就抢他了,别无他家;如果房屋有两家,则抢劫富有的那家

2,抢劫的房屋数大于两个,这会就该想想转移方程怎么写了,小偷光顾到了第i家,这时候小偷有两个选择,偷或者不偷,假如小偷不偷第i家,则此时小偷已经偷到的钱为dp[i-1],假如小偷要偷第i家,则小偷偷到的是dp[i-2]+nums[i]。从i-2家偷过来肯定是可以并且安全的。

3,比较偷还是不偷的大小,取大的

#define MAX(x,y) (x)>(y)?(x):(y)
int rob(int* nums, int numsSize)
{if(numsSize == 0)   return 0;if(numsSize == 1)   return nums[0];if(numsSize == 2)   return MAX(nums[0],nums[1]);int *dp = (int *)malloc(sizeof(int)*numsSize);memset(dp,0,numsSize);int i = 0;int res = 0;for(i=0; i<numsSize; i++){if(i == 0){dp[i] = nums[0];continue;}  if(i == 1){dp[i] = MAX(nums[0],nums[1]);continue;}dp[i] = MAX(dp[i-1],dp[i-2]+nums[i]);res = MAX(res,dp[i]);  }return res;
}

运行结果:

二:打家劫舍II

解题思路:

可以把上一题看做这一题的子集,头尾的房屋其是一家的,不能同时偷,那我们可以分两种情况

1,小偷从第1家开始光顾,在倒数第二家停下来

2,小偷从第2家开始光顾,在最后一家停下来

这样就完美的避免了,同时抢劫了第一家和最后一家

#define MAX(x,y) (x)>(y)?(x):(y)int subRob(int *nums, int numsSize)
{if(numsSize == 0)   return 0;if(numsSize == 1)   return nums[0];if(numsSize == 2)   return MAX(nums[0],nums[1]);int *dp = (int *)malloc(sizeof(int)*numsSize);memset(dp,0,numsSize);int i = 0;int res = 0;for(i=0; i<numsSize; i++){if(i == 0){dp[i] = nums[0];continue;}  if(i == 1){dp[i] = MAX(nums[0],nums[1]);continue;}dp[i] = MAX(dp[i-1],dp[i-2]+nums[i]);res = MAX(res,dp[i]);  }return res;
}int rob(int* nums, int numsSize)
{if(numsSize == 0)   return 0;if(numsSize == 1)   return nums[0];if(numsSize == 2)   return MAX(nums[0],nums[1]);return MAX(subRob(nums,numsSize-1),subRob(nums+1,numsSize-1));
}

运行结果:

三:打家劫舍III

该题我是看了答案理解的,也说说答案的思路吧

1,对于一个二叉树的节点,我们有两个选择,打劫或者不打劫

2,比如实例2中的节点3,打劫该节点的话,则4,5节点均不能打劫,因为与3相连,则这时候能打劫到的最大数即节点3的值加上节点4和5分支的最大值

3,不打劫节点3,则选择就比较多了,节点4和5都可以打劫也可以不打劫,只需要选出其中你的最大值即可

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/struct SubtreeStatus {int selected;int notSelected;
};struct SubtreeStatus dfs(struct TreeNode *node) {if (!node) {return (struct SubtreeStatus){0, 0};}struct SubtreeStatus l = dfs(node->left);struct SubtreeStatus r = dfs(node->right);int selected = node->val + l.notSelected + r.notSelected;int notSelected = fmax(l.selected, l.notSelected) + fmax(r.selected, r.notSelected);return (struct SubtreeStatus){selected, notSelected};
}int rob(struct TreeNode *root) {struct SubtreeStatus rootStatus = dfs(root);return fmax(rootStatus.selected, rootStatus.notSelected);
}

运行结果:

C语言----打家劫舍(leetcode三题汇总)相关推荐

  1. 华为笔试c语言,华为笔试算法题汇总

    本文为大家分享了华为2014笔试4道算法题,供大家参考,具体内容如下 1.通过键盘输入一串小写字母(a~z)组成的字符串.请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤 ...

  2. [leetcode刷题]汇总(二)

    文章目录 二分查找 69 x的平方根 367 有效的完全平方数 33 搜索旋转排序数组(中等) 74 搜索二维矩阵(中等) 153 找到旋转数组中的最小值(中等) 动态规划 斐波拉 62 不同路径(中 ...

  3. [leetcode刷题]汇总(一)

    总结:刷题的时间安排的不是很好,每天安排的时间不定,需要定时定量完成任务.题解思路都放在的代码中,为了方便后面复习.        文章没有解题思路和代码,主要记录自己的刷题过程.题解在网站都很容易找 ...

  4. leetcode零散题汇总

    零散题 golang力扣leetcode 15.三数之和 golang力扣leetcode 128. 最长连续序列 golang力扣leetcode 1345.跳跃游戏IV golang力扣leetc ...

  5. LeetCode1-620题汇总,希望对你有点帮助!

    时间很快,公众号发布的LeetCode题目,已经达到620道题了.今天把发布的1-620篇LeetCode文章整理一下,平时文章都放在比较末尾,阅读量都不高,相信很多人都没看过,如果对于算法感兴趣的, ...

  6. LeetCode1-580题汇总,希望对你有点帮助!

    时间很快,公众号发布的LeetCode题目,已经达到560道题了.今天把发布的1-560篇LeetCode文章整理一下,平时文章都放在比较末尾,阅读量都不高,相信很多人都没看过,如果对于算法感兴趣的, ...

  7. LeetCode1-560题汇总,希望对你有点帮助!

    时间很快,公众号发布的LeetCode题目,已经达到560道题了.今天把发布的1-560篇LeetCode文章整理一下,平时文章都放在比较末尾,阅读量都不高,相信很多人都没看过,如果对于算法感兴趣的, ...

  8. LeetCode1-540题汇总,希望对你有点帮助!

    时间很快,公众号发布的LeetCode题目,已经达到520道题了.今天把发布的1-520篇LeetCode文章整理一下,平时文章都放在比较末尾,阅读量都不高,相信很多人都没看过,如果对于算法感兴趣的, ...

  9. LeetCode1-500题汇总,希望对你有点帮助!

    时间很快,公众号发布的LeetCode题目,已经达到500道题了.今天把发布的1-500篇LeetCode文章整理一下,平时文章都放在比较末尾,阅读量都不高,相信很多人都没看过,如果对于算法感兴趣的, ...

  10. LeetCode1-480题汇总,希望对你有点帮助!

    时间很快,公众号发布的LeetCode题目,已经达到480道题了.今天把发布的1-480篇LeetCode文章整理一下,平时文章都放在比较末尾,阅读量都不高,相信很多人都没看过,如果对于算法感兴趣的, ...

最新文章

  1. 口罩巨头挑战“量子霸权”,3个月造出的『最强量子计算机』靠谱不?
  2. 图像滤镜艺术---图像滤镜晕影调节算法研究
  3. 人脸识别走光引热议!原来后台能看到的不只有脸,网友已社死,审核辣哭眼...
  4. 通过修改Delphi 的 RTL,加快Delphi开发的应用程序速度和稳定性
  5. Tcpdump抓包命令使用
  6. 这几个开源的商城实战项目,良月柒强烈推荐!
  7. 局域网共享工具_还在用数据线?快来试试网页版局域网共享工具!
  8. 1月16日英语计算机统考,高考英语听力首次机考16日开考
  9. 如何搭建视频点播服务
  10. vscode 设置中文语言包
  11. 新能源外地车进京限行限号政策是怎样的?
  12. 基于JAVA的企业OA办公系统
  13. 测试老鸟分享:掌握2项技能,轻松拿到软件测试工程师offer...
  14. Python网页截图/屏幕截图/截长图如何实现?
  15. 建筑灭火器配置设计规范
  16. LogLog Counting
  17. vivo打开开发者选项
  18. Unity URP 手撸一个自己的PBR材质
  19. 我的中国心-百家姓头像
  20. centos7如何安装视频播放器

热门文章

  1. 【计算机图形学】几何
  2. 【idea配置】idea右下角不显示版本分支
  3. Selenium自动化程序被检测为爬虫,怎么屏蔽和绕过
  4. 当甲骨文思维遇上谷歌精神,谷歌云将走向何方?
  5. auto semicolon insertion 自动分号补齐的坑
  6. 微软“玻璃硬盘”问世:2毫米杯垫大小可存储75.8G数据,1000年不坏!
  7. 数据预处理(数据审核、缺失值处理、标准化正则化、降维等)
  8. 使用outlook及office assitans实现邮件批量发送
  9. 那些年收藏的技术文章(二)-云笔记篇
  10. docker 在win7电脑上的部署