題目描述:題目鏈結
題目分析:座標dp
(1)要麼休息,要麼上班,要麼健身,除了休息前一天不能幹相同的。
(2)開乙個陣列dp[n][3],分別代表
dp[i][0] :代表第i天休息時,此時最少休息的天數
dp[i][1]:代表第i天上班時,此時最少休息的天數
dp[i][2]:代表第i天健身時,此時最少休息的天數。
我的錯誤點:陣列要賦值乙個大於情況的初始值,因為有的位置填不了數(由於公司或健身房不開門,此時這個位置就不填數字)
(3)給第0天的賦值,dp[0][0] = 1, dp[0][1]=1 or 0(公司開門就為0),dp[0][2] = 1 or 0(健身房開門就為0,不開就為1)
(4)開始遍歷從第0天到第n-1天。
當第i天為休息,則從i-1天選乙個最小的數+新的休息天數,則:dp[i][0] = 1 + math.min(dp[i-1][0],math.min(dp[i-1][1],dp[i-1][2]));
當第i天為上班,則從i-1天健身房(開門再選)和休息天數裡面選。
當第i天為健身,則從i-1天公司(開門再選)和休息天數裡面選。
(5)最後取第dp[n-1][0-2]中最小的數即可
public class solution
dp[0][0] = 1;
if(company.get(0)==1)
dp[0][1] = 0;
else
dp[0][1] = 1;
if(gym.get(0)==1)
dp[0][2] = 0;
else
dp[0][2] = 1;
//開始遍歷
for(int i=1;i
//第i天健身
if(gym.get(i)==1)
}for(int i=0;i
system.out.println();
}return math.min(dp[n-1][0],math.min(dp[n-1][1],dp[n-1][2]));}}
LeetCode刷題筆記第26題
題目 給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用o 1 額外空間的條件下完成。題目分析 做題之前一定要將題目分析的細緻一些,因為有些條件如果一旦不注意就會造成程式結果出現偏差或者執行不通過...
leetcode刷題第5題 最長公共字首
題目 編寫乙個函式來查詢字串陣列中的最長公共字首。如果不存在公共字首,返回空字串 思路 先求出字串中的最小串,再通過找出第一次出現次數不滿的位置,輸出子串就可以了,熟悉字串的一些基本函式,例如子串提取。注意 strs.size 是指vector向量的大小,strs 0 size 是指數組第乙個元素 ...
《劍指offer》刷題打卡第1天
面試題1 二維陣列中的查詢 題目 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。演算法思想 第一步 選取陣列右上角的數字9,將7與9作比較,9 7,又因為9是第四列中最小的乙個數,...