泰州模板建站哪家好,济南 规划 网站,枣阳网站定制,外国食品优秀设计网站213. 打家劫舍 II
题目描述#xff1a;你是一个专业的小偷#xff0c;计划偷窃沿街的房屋#xff0c;每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈 #xff0c;这意味着第一个房屋和最后一个房屋是紧挨着的。同时#xff0c;相邻的房屋装有相互连通的防盗系统…213. 打家劫舍 II
题目描述你是一个专业的小偷计划偷窃沿街的房屋每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈 这意味着第一个房屋和最后一个房屋是紧挨着的。同时相邻的房屋装有相互连通的防盗系统如果两间相邻的房屋在同一晚上被小偷闯入系统会自动报警 。
给定一个代表每个房屋存放金额的非负整数数组计算你在不触动警报装置的情况下 今晚能够偷窃到的最高金额。
考察重点动态规划
方法概括(本是线性查找头尾相连后如何解决) 同198只需在此基础上分为0-n-1与1-n两次查找即可
func findMax(nums []int) int {max : -1for i : 0; i len(nums); i {if max nums[i] {max nums[i]}}return max
}func Rob(nums []int) int {max : -1if len(nums) 3 { //数组长度小于3返回最大值return findMax(nums)}nums1 : make([]int, len(nums)) //一共进行两次不相关的遍历分别从0-n-1与1-n比较得到两数组中的最大值就是返回结果copy(nums1, nums[:])nums1[1] int(math.Max(float64(nums1[0]), float64(nums1[1])))for i : 2; i len(nums)-1; i {nums1[i] int(math.Max(float64(nums1[i-1]), float64(nums1[i-2]nums1[i])))max int(math.Max(float64(nums1[i]), float64(max)))}nums[2] int(math.Max(float64(nums[1]), float64(nums[2])))for i : 3; i len(nums); i {nums[i] int(math.Max(float64(nums[i-1]), float64(nums[i-2]nums[i])))max int(math.Max(float64(nums[i]), float64(max)))}return max
}