leecode1793 | 好子数组的最大分数 | 求给高度矩阵最大值

文章讲述了如何通过双指针技巧解决一个编程问题,即在给定整数数组中,找到以指定索引k为分界点的子数组,使得(i-k+1)*nums[i]的最大值。涉及到思维转换和贪心策略的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

题目我就不念了,就一个字难理解,给的题总是这么难懂,总感觉出题人的语文是体育老师教的?
还有就是思维转变,才能能好的理解?一味的钻牛角尖死理解,效果不好
思维的转变 ===>悟性??
不知道是不是
反正题目,给一个整数数组,然后一个k
其中k 是其中元素的下标,具体不确定
然后满足,i <= k <= j
实现ans = (j - i + 1)* nums[i]是最大值,这就是 好子数组的最大可能分数
换一个意思来理解这到题目
给定柱状图,然后给定一水平线(是其中一柱子的顶部)现在要找围城面积最大值。怎么围?高要尽可能最大,宽要尽可能最大,涉及左右移动,就要想到双指针

int solution(vector<int> &nums, int k){
	int n = nums.size(), ans = 0;
	int l = k - 1, r = k + 1;
	//写一个死循环
	for(int i = nums[k]; ; i--){
		//先判断左边再判断右边
		
		//左边居然有高于最高点 i 那么左移
		while(l >= 0 && nums[l] >= i){
			l--;
		}
		//	右边居然有比当前最高点还高的,那么右移	变得更宽
		while(r < n && nums[r] >= i){
			r++
		}
		ans = max(ans, (r - l - 1)*i);
		//判断是否到了边界	因为左边到了边界,右边其实可能还可以继续移动,美其名曰继续压榨廉价劳动力  贪心?
		if(l == -1 && r == n){
			break;
		}
		
	}
	return ans;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值