962.最大宽度坡(有关谓词和struct的使用)

给定一个整数数组 A,坡是元组 (i, j),其中  i < j 且 A[i] <= A[j]。这样的坡的宽度为 j - i。

找出 A 中的坡的最大宽度,如果不存在,返回 0 。

 

示例 1:

输入:[6,0,8,2,1,5]
输出:4
解释:
最大宽度的坡为 (i, j) = (1, 5): A[1] = 0 且 A[5] = 5.
示例 2:

输入:[9,8,1,0,1,9,4,0,4,1]
输出:7
解释:
最大宽度的坡为 (i, j) = (2, 9): A[2] = 1 且 A[9] = 1.

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-width-ramp
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution {
public:
  //绑定数字和索引的关系
    struct node{
        int val;
        int idx;
        node(int v,int i):val(v),idx(i){}//构造函数声明
    };

    //谓词
    //我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。

    //静态成员在类的所有对象中是共享的。
    //如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。我们不能把静态成员的初始化放置在类的定义中,但是可以在类的外部通过使用范围解析运算符 :: 来重新声明静态变量从而对它进行初始化
    static bool cmp(node a,node b){
        if(a.val == b.val) return a.idx< b.idx;
        return a.val<b.val;
    }
   
    int maxWidthRamp(vector<int>& A) {
        //0 1 2 5 6 8 对原数组排序
        //1 4 3 5 0 2 索引
        //从小到大排序,当前索引减去最小索引
        //当前索引减去的都是比这个数小的索引
        int len = A.size();
        int ans = 0,idx = len;
        vector<node> v;
        for(int i=0;i<len;i++){
            v.push_back(node(A[i],i));
        }
        sort(v.begin(),v.end(),cmp);

        for(int i=0;i<len;i++){
            ans = max(ans,v[i].idx-idx);
            idx = min(idx,v[i].idx);
        }

        return ans;
    }
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值