由于前些天不知道在干什么很忙的样子就刷完题没有总结,趁周末总结一下,放一些简单的但是思路不太好找的题
就是第一眼思路很简单就是找最大值最小值呗!但是这个是有先后之分的如果最大值在前面你就是奔着赔钱去的,所以你用sort()函数就不好处理了,就会丢失掉下标信息
昨天在计算机院群里讨论,好像也没有好的方法排序的同时保存下标信息。(还没有问自动化院同学)唯一的解决办法就是构造成结构体数组然后存下标和数值。这样又让不会排序函数的我变得很搞笑,本来就要摆烂继续用冒泡了,但是鉴于sort()函数是真的好用,然后就选择使用sort()手写第三个函数确定排序规则。
class Solution
{
public:
int maxProfit(vector<int>& prices)
{
int low = INT_MAX;//使low为最小值
int result = 0;
for (int i = 0; i < prices.size(); i++) {
low = min(low, prices[i]); // 遍历取最左最小价格
result = max(result, prices[i] - low); // 直接取最大区间利润
}
return result;
}
};
这个思路就很清晰明确,一次遍历解决问题,但是真正自己想的时候并不容易输出
1~更新最小值low=min(low,prices[i])
2~更新最大收益result=max(result,prices[i]-low)
!!!!!这个初始值也很有讲究因为长度至少为1所以low一定是一个正值,初始为INT_MIN没有关系
!!!!而result就不能这样啦,初始化为0才OK
class Solution {
public:
vector<vector<int>> matrixReshape(vector<vector<int>>& mat, int r, int c)
{
int m=mat.size();
int n=mat[0].size();
if(r*c!=m*n)return mat;
vector<vector<int>> ans(r, vector<int>(c));
for(int i=0;i<m*n;i++)
{
ans[i/c][i%c]=mat[i/n][i%n];
}
return ans;
}
};
这个也是一道简单题,特别让我喜欢的就是这操作
ans[i/c][i%c]=mat[i/n][i%n];
本来我想先化成一维数组,这样除法+求余就避开了
vector<vector<int>> ans(r, vector<int>(c));
c++的vector容器类好想学会,感觉很好用自己只会一维的