做app 的模板下载网站有哪些,网站建设学校,hugo网站建设,网站空间域名每年都得交吗题目 你是一个专业的小偷#xff0c;计划偷窃沿街的房屋#xff0c;每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 #xff0c;这意味着第一个房屋和最后一个房屋是紧挨着的。同时#xff0c;相邻的房屋装有相互连通的防盗系统#xff0c;如果两间相邻的房屋在…题目 你是一个专业的小偷计划偷窃沿街的房屋每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 这意味着第一个房屋和最后一个房屋是紧挨着的。同时相邻的房屋装有相互连通的防盗系统如果两间相邻的房屋在同一晚上被小偷闯入系统会自动报警 。 给定一个代表每个房屋存放金额的非负整数数组计算你 在不触动警报装置的情况下 今晚能够偷窃到的最高金额。 解题思路
将环断开分情况为偷首节点和不偷首节点的情况限制起始和结束位置对偷盗金额进行最大值计算
代码展示
class Solution {public int rob(int[] nums) {if(nums.length 1){return nums[0];}int n nums.length;//分两种情况计算偷首节点和不偷首节点return Math.max(nums[0] rob1(nums, 2 , n - 1), rob1(nums, 1, n));}private int rob1(int[] nums, int start, int end){int steal0 0; //上一节点未偷int steal1 0; //当前节点最大值for (int i start; i end; i){int max Math.max( steal1, steal0 nums[i]);steal0 steal1;steal1 max;}return steal1;}
}