Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit b16bf44

Browse files
Update 0198.打家劫舍.md
1 parent b660360 commit b16bf44

File tree

1 file changed

+32
-3
lines changed

1 file changed

+32
-3
lines changed

‎problems/0198.打家劫舍.md‎

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,36 @@ class Solution {
141141
}
142142
}
143143
144-
// 空间优化 dp数组只存与计算相关的两次数据
144+
// 使用滚动数组思想,优化空间
145+
// 分析本题可以发现,所求结果仅依赖于前两种状态,此时可以使用滚动数组思想将空间复杂度降低为3个空间
146+
class Solution {
147+
public int rob(int[] nums) {
148+
149+
int len = nums.length;
150+
151+
if (len == 0) return 0;
152+
else if (len == 1) return nums[0];
153+
else if (len == 2) return Math.max(nums[0],nums[1]);
154+
155+
156+
int[] result = new int[3]; //存放选择的结果
157+
result[0] = nums[0];
158+
result[1] = Math.max(nums[0],nums[1]);
159+
160+
161+
for(int i=2;i<len;i++){
162+
163+
result[2] = Math.max(result[0]+nums[i],result[1]);
164+
165+
result[0] = result[1];
166+
result[1] = result[2];
167+
}
168+
169+
return result[2];
170+
}
171+
}
172+
173+
// 进一步对滚动数组的空间优化 dp数组只存与计算相关的两次数据
145174
class Solution {
146175
public int rob(int[] nums) {
147176
if (nums.length == 1) {
@@ -151,11 +180,11 @@ class Solution {
151180
// 优化空间 dp数组只用2格空间 只记录与当前计算相关的前两个结果
152181
int[] dp = new int[2];
153182
dp[0] = nums[0];
154-
dp[1] = nums[0] > nums[1] ? nums[0] : nums[1];
183+
dp[1] = Math.max(nums[0],nums[1]);
155184
int res = 0;
156185
// 遍历
157186
for (int i = 2; i < nums.length; i++) {
158-
res = (dp[0] + nums[i]) > dp[1] ? (dp[0] + nums[i]) : dp[1];
187+
res = Math.max((dp[0] + nums[i]) , dp[1] );
159188
dp[0] = dp[1];
160189
dp[1] = res;
161190
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /