欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 力扣 最大子数组和,寻找目标值-二维数组

力扣 最大子数组和,寻找目标值-二维数组

2024/10/23 1:06:24 来源:https://blog.csdn.net/2303_80645930/article/details/143029567  浏览:    关键词:力扣 最大子数组和,寻找目标值-二维数组

一 最大子数组和

数组链接:力扣:53.最大子数组和

示例: 输入:nums = [-2, 1, -3, 4, -1, 2, 1, -5, 4]

输出:6

解释:连续子数组[4, -1, 2, 1]的和最大,为6。

解题思想:

贪心算法:在遍历数组时,在进行累加连续和的过程中,如果连续和是一个负数,那么累加后面的数会导致后面的数变小。例如:“-1+2”,这里-1只会让2变得更小,而不会变大。所以我们与其使用这个-1,不如重新开始,将 “2” 作为连续和的新起点。由此推断,我们可以得知,如果当前连续和是负数的情况下,就抛弃这个连续和,直接选择下一个数作为新的起点开始遍历,因为负数只会拖累我们的总和。

注意:这里强调的是连续和是负数的时候,我们就立刻抛弃这个连续和,没说是遇到负数我们就立刻抛弃,两者有区别。

a67c9ca903dd4f38827739ae98992698.png

代码:

class Solution {
public:int maxSubArray(vector<int>& nums) {int max=INT_MIN;int sum=0;for(int i=0;i<nums.size();i++){sum+=nums[i];max=sum>max?sum:max;sum=sum>0?sum:0;}return max;}
};

二 寻找目标值-二维数组

题目链接:力扣:LCR121.寻找目标值-二维数组

m*n 的二维数组 plants 记录了园林景观的植物排布情况,具有以下特性:

● 每行中,每棵植物的右侧相邻植物不矮于该植物;

● 每列中,每棵植物的下侧相邻植物不矮于该植物。

请判断 plants 中是否存在目标高度值 target。

示例:

输入:plants = [[2, 3, 6, 8], [4, 5, 8, 9], [5, 9, 10, 12]],target = 10

输出:true

解题思想:

由于给定的二维数组具备每行从左到右递增,每列从上到下递增的特点,

当访问到一个元素时,可以排除数组中的部分元素。从二维数组的右上角开始查找。如果当前元素大于目标值,则移到左边一列。若当前元素等于目标值,则返回true。如果当前元素大于目标值,则移到左边一列。如果当前元素小于目标值,则移到下边一行。

证明:如果当前元素大于目标值,说明当前元素的下边的所有元素都一定大于目标值,因此往下查找不可能找到目标值,往左查找可能找到目标值。如果当前元素小于目标值,说明当前元素的左边的所有元素都一定小于目标值,因此往左查找不可能找到目标值,往下查找可能找到目标值。

e9db3a4499f64157a270055f10b379f8.png

代码:

class Solution {
public:bool findTargetIn2DPlants(vector<vector<int>>& plants, int target) {if(plants.size()==0) return false;int m=plants.size();//二维数组的行数int n=plants[0].size();//二维数组的列数int row=0,col=n-1;while(col>=0&&row<m){if(plants[row][col]<target) row++;else if(plants[row][col]>target) col--;else return true;}return false;}
};

祝大家生活愉快。

 

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com