LeetCode1.13-->1.15总结

由于前些天不知道在干什么很忙的样子就刷完题没有总结,趁周末总结一下,放一些简单的但是思路不太好找的题

就是第一眼思路很简单就是找最大值最小值呗!但是这个是有先后之分的如果最大值在前面你就是奔着赔钱去的,所以你用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容器类好想学会,感觉很好用自己只会一维的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值