avatar-decorate
路新宇 level
获赞
1
粉丝
0
关注
4
看过 TA
2
Mid Sweden university
2016
C++
IP属地:北京
暂未填写个人简介
私信
关注
class Solution {public://记录四个方向int dirs[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};int n, m;//深度优先搜索,返回最大单元格数int dfs(vector > &matrix, vector > &dp, int i, int j) {if(dp[i][j] != 0)return dp[i][j];dp[i][j]++;for(int k = 0; k < 4; k++){int nexti = i + dirs[k][0];int nextj = j + dirs[k][1];//判断条件if (nexti >= 0 && nexti < n && nextj >= 0 && nextj < m && matrix[nexti][nextj] > matrix[i][j])dp[i][j] = max(dp[i][j], dfs(matrix, dp, nexti, nextj) + 1);}return dp[i][j];}int solve(vector >& matrix) {//矩阵不为空if(matrix.size() == 0 || matrix[0].size() == 0)return 0;int res = 0;n = matrix.size();m = matrix[0].size();//i,j处的单元格拥有的最长递增路径vector > dp (n, vector  (m));for(int i = 0; i < n; i++)for (int j = 0; j < m; j++)//更新最大值res = max(res, dfs(matrix, dp, i, j));return res;}};
0 点赞 评论 收藏
分享
最多可以买入卖出2次,那实际上相当于它的状态多了几个,对于每天有到此为止的最大收益和持股情况两个状态,持股情况有了5种变化,我们用:dp[i][0]dp[i][0]dp[i][0]表示到第i天为止没有买过股票的最大收益dp[i][1]dp[i][1]dp[i][1]表示到第i天为止买过一次股票还没有卖出的最大收益dp[i][2]dp[i][2]dp[i][2]表示到第i天为止买过一次也卖出过一次股票的最大收益dp[i][3]dp[i][3]dp[i][3]表示到第i天为止买过两次只卖出过一次股票的最大收益dp[i][4]dp[i][4]dp[i][4]表示到第i天为止买过两次同时也买出过两次股票的最大收益class Solution {public:int maxProfit(vector& prices) {int n = prices.size();//初始化dp为最小vector > dp(n, vector(5, -10000));//第0天不持有状态dp[0][0] = 0;//第0天持有股票dp[0][1] = -prices[0];//状态转移for(int i = 1; i < n; i++){dp[i][0] = dp[i - 1][0];dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] - prices[i]);dp[i][2] = max(dp[i - 1][2], dp[i - 1][1] + prices[i]);dp[i][3] = max(dp[i - 1][3], dp[i - 1][2] - prices[i]);dp[i][4] = max(dp[i - 1][4], dp[i - 1][3] + prices[i]);}//选取最大值,可以只操作一次return max(dp[n - 1][2], max(0, dp[n - 1][4]));}};
0 点赞 评论 收藏
分享
//  结点1->next结点2->next结点3//    |          |//  pHead       temp(保存pHead的后继结点)//变为://  结点1next<-结点2->next结点3//    |          |         |//  preNode     pHead     temp////需要4步: 第1步:保存pHead的后继结点;//         第2步:将结点2的后继变为结点1;//         第3步:preNode指针后移//         第4步:pHead指针后移//循环以上4步,至到pHead为空即可结束循环struct ListNode* ReverseList(struct ListNode* pHead ) {struct ListNode* preNode = NULL;struct ListNode* temp = NULL;while(pHead != NULL)            //至到pHead为空即可结束循环{temp = pHead->next;       //第1步pHead->next = preNode;   //第2步preNode = pHead;        //第3步pHead = temp;          //第4步}return preNode;           //返回最开始链表的最后一个结点}
0 点赞 评论 收藏
分享
头像
2021-04-17 21:25
Mid Sweden university C++
0 点赞 评论 收藏
分享
头像
2020-10-23 06:50
Mid Sweden university C++
0 点赞 评论 收藏
分享
头像
2020-10-21 09:57
Mid Sweden university C++
0 点赞 评论 收藏
分享
头像
2020-10-20 11:32
Mid Sweden university C++
0 点赞 评论 收藏
分享
头像
2020-10-19 11:47
Mid Sweden university C++
0 点赞 评论 收藏
分享
头像
2020-10-18 20:14
Mid Sweden university C++
0 点赞 评论 收藏
分享
头像
2020-09-12 11:21
Mid Sweden university C++
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务