首页 > 其他分享 >【LeeCode】198. 打家劫舍

【LeeCode】198. 打家劫舍

时间:2023-01-02 23:37:05浏览次数:70  
标签:198 nums int max rob Solution LeeCode new 打家劫舍

【题目描述】

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警

给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。

​https://leetcode.cn/problems/house-robber/?favorite=2cktkvj​

【示例】

【LeeCode】198. 打家劫舍_Math


【代码】​​官方​

动态规划

package com.company;
// 2023-1-3

class Solution {
public int rob(int[] nums) {
int pre = 0;
int cur = 0;

for (int x : nums){
int tmp = Math.max(cur, pre + x);
pre = cur;
cur = tmp;
}
return cur;
}
}

public class Test{
public static void main(String[] args) {
int[] arr = {1,2,3,1};
new Solution().rob(arr); // 输出 4

int[] arr2 = {2,7,9,3,1};
new Solution().rob(arr2); // 输出 12

int[] arr3 = {2,1};
new Solution().rob(arr3); // 输出 2

int[] arr4 = {1, 3, 1};
new Solution().rob(arr4); // 输出 3
}
}


【代码】admin

通过率 40/70 遇到[2,1,1,2]的时候才发现真正理解题意了 这个输出是 4 而本代码输出3 

package com.company;
// 2023-1-3

class Solution {
public int rob(int[] nums) {
if (nums.length == 1) return nums[0];
if (nums.length == 2) return Math.max(nums[0], nums[1]);

int max = 0;
// {1, 3, 1}
for (int i = 0; i < nums.length; i++){
int sum = 0;
for (int j = i; j < nums.length; j+= 2) {
sum += nums[j];
}
max = Math.max(sum, max);
max = Math.max(max, nums[i]);
}
System.out.println(max);
return max;
}
}

public class Test{
public static void main(String[] args) {
int[] arr = {1,2,3,1};
new Solution().rob(arr); // 输出 4

int[] arr2 = {2,7,9,3,1};
new Solution().rob(arr2); // 输出 12

int[] arr3 = {2,1};
new Solution().rob(arr3); // 输出 2

int[] arr4 = {1, 3, 1};
new Solution().rob(arr4); // 输出 3
}
}
package com.company;
// 2023-1-3

class Solution {
public int rob(int[] nums) {
if (nums.length == 1) return nums[0];
if (nums.length == 2) return Math.max(nums[0], nums[1]);

int max = 0;
// {1, 3, 1}
for (int i = 0; i < nums.length; i++){
int sum = 0;
for (int j = i; j < nums.length; j+= 2) {
sum += nums[j];
}
max = Math.max(sum, max);
max = Math.max(max, nums[i]);
}
System.out.println(max);
return max;
}
}

public class Test{
public static void main(String[] args) {
int[] arr = {1,2,3,1};
new Solution().rob(arr); // 输出 4

int[] arr2 = {2,7,9,3,1};
new Solution().rob(arr2); // 输出 12

int[] arr3 = {2,1};
new Solution().rob(arr3); // 输出 2

int[] arr4 = {1, 3, 1};
new Solution().rob(arr4); // 输出 3
}
}

标签:198,nums,int,max,rob,Solution,LeeCode,new,打家劫舍
From: https://blog.51cto.com/u_13682316/5984321

相关文章

  • 【LeeCode】2443. 反转之后的数字和
    【题目描述】给一个 非负 整数 ​​num​​ 。如果存在某个 非负 整数 ​​k​​​ 满足 ​​k+reverse(k)=num​​​ ,则返回 ​​true​​ ;否则,返回 ​......
  • 【LeeCode】14. 最长公共前缀
    【题目描述】编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ​​""​​。​​​​https://leetcode.cn/problems/longest-common-prefix......
  • 【LeeCode】58. 最后一个单词的长度
    【题目描述】给你一个字符串 ​​s​​,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。单词 是指仅由字母组成、不包含任何空格字符的......
  • 【LeeCode】118. 杨辉三角
    【题目描述】给定一个非负整数numRows,生成「杨辉三角」的前numRows行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。​​https://leetcode.cn/problems/pascals-......
  • 【LeeCode】461. 汉明距离
    【题目描述】两个整数之间的 ​​汉明距离​​ 指的是这两个数字对应二进制位不同的位置的数目。给你两个整数 ​​x​​​ 和 ​​y​​,计算并返回它们之间的汉明距离......
  • 【LeeCode】9. 回文数
    【题目描述】回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,​​121​​​ 是回文,而 ​​123​​ 不是。​​​​https://leetcode.cn/problems/palindrom......
  • P1198 JSOI2008 最大数
    P1198JSOI2008最大数-洛谷|计算机科学教育新生态(luogu.com.cn)采用ST表维护RMQ。对于插入操作,设插入后数列长度变为\(n\),我们只需重新修改满足\(i+2^j-......
  • 【LeeCode】34. 在排序数组中查找元素的第一个和最后一个位置
    【题目描述】给你一个按照非递减顺序排列的整数数组 ​​nums​​​,和一个目标值 ​​target​​。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目......
  • 【LeeCode】67. 二进制求和
    【题目描述】给你两个二进制字符串 ​​a​​ 和 ​​b​​ ,以二进制字符串的形式返回它们的和。​​https://leetcode.cn/problems/add-binary/​​​【示例】【代码】......
  • 【221224-3】求:2的a次方-2的b次方=1984的正整数解.
    ......