C语言----打家劫舍(leetcode三题汇总)
目录
一:打家劫舍
二:打家劫舍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三题汇总)相关推荐
- 华为笔试c语言,华为笔试算法题汇总
本文为大家分享了华为2014笔试4道算法题,供大家参考,具体内容如下 1.通过键盘输入一串小写字母(a~z)组成的字符串.请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤 ...
- [leetcode刷题]汇总(二)
文章目录 二分查找 69 x的平方根 367 有效的完全平方数 33 搜索旋转排序数组(中等) 74 搜索二维矩阵(中等) 153 找到旋转数组中的最小值(中等) 动态规划 斐波拉 62 不同路径(中 ...
- [leetcode刷题]汇总(一)
总结:刷题的时间安排的不是很好,每天安排的时间不定,需要定时定量完成任务.题解思路都放在的代码中,为了方便后面复习. 文章没有解题思路和代码,主要记录自己的刷题过程.题解在网站都很容易找 ...
- leetcode零散题汇总
零散题 golang力扣leetcode 15.三数之和 golang力扣leetcode 128. 最长连续序列 golang力扣leetcode 1345.跳跃游戏IV golang力扣leetc ...
- LeetCode1-620题汇总,希望对你有点帮助!
时间很快,公众号发布的LeetCode题目,已经达到620道题了.今天把发布的1-620篇LeetCode文章整理一下,平时文章都放在比较末尾,阅读量都不高,相信很多人都没看过,如果对于算法感兴趣的, ...
- LeetCode1-580题汇总,希望对你有点帮助!
时间很快,公众号发布的LeetCode题目,已经达到560道题了.今天把发布的1-560篇LeetCode文章整理一下,平时文章都放在比较末尾,阅读量都不高,相信很多人都没看过,如果对于算法感兴趣的, ...
- LeetCode1-560题汇总,希望对你有点帮助!
时间很快,公众号发布的LeetCode题目,已经达到560道题了.今天把发布的1-560篇LeetCode文章整理一下,平时文章都放在比较末尾,阅读量都不高,相信很多人都没看过,如果对于算法感兴趣的, ...
- LeetCode1-540题汇总,希望对你有点帮助!
时间很快,公众号发布的LeetCode题目,已经达到520道题了.今天把发布的1-520篇LeetCode文章整理一下,平时文章都放在比较末尾,阅读量都不高,相信很多人都没看过,如果对于算法感兴趣的, ...
- LeetCode1-500题汇总,希望对你有点帮助!
时间很快,公众号发布的LeetCode题目,已经达到500道题了.今天把发布的1-500篇LeetCode文章整理一下,平时文章都放在比较末尾,阅读量都不高,相信很多人都没看过,如果对于算法感兴趣的, ...
- LeetCode1-480题汇总,希望对你有点帮助!
时间很快,公众号发布的LeetCode题目,已经达到480道题了.今天把发布的1-480篇LeetCode文章整理一下,平时文章都放在比较末尾,阅读量都不高,相信很多人都没看过,如果对于算法感兴趣的, ...
最新文章
- 口罩巨头挑战“量子霸权”,3个月造出的『最强量子计算机』靠谱不?
- 图像滤镜艺术---图像滤镜晕影调节算法研究
- 人脸识别走光引热议!原来后台能看到的不只有脸,网友已社死,审核辣哭眼...
- 通过修改Delphi 的 RTL,加快Delphi开发的应用程序速度和稳定性
- Tcpdump抓包命令使用
- 这几个开源的商城实战项目,良月柒强烈推荐!
- 局域网共享工具_还在用数据线?快来试试网页版局域网共享工具!
- 1月16日英语计算机统考,高考英语听力首次机考16日开考
- 如何搭建视频点播服务
- vscode 设置中文语言包
- 新能源外地车进京限行限号政策是怎样的?
- 基于JAVA的企业OA办公系统
- 测试老鸟分享:掌握2项技能,轻松拿到软件测试工程师offer...
- Python网页截图/屏幕截图/截长图如何实现?
- 建筑灭火器配置设计规范
- LogLog Counting
- vivo打开开发者选项
- Unity URP 手撸一个自己的PBR材质
- 我的中国心-百家姓头像
- centos7如何安装视频播放器