力扣题目
解题思路
java代码
力扣题目:
m
*n
的二维数组 plants
记录了园林景观的植物排布情况,具有以下特性:
- 每行中,每棵植物的右侧相邻植物不矮于该植物;
- 每列中,每棵植物的下侧相邻植物不矮于该植物。
请判断 plants
中是否存在目标高度值 target
。
示例 1:
输入:plants = [[2,3,6,8],[4,5,8,9],[5,9,10,12]], target = 8 输出:true
示例 2:
输入:plants = [[1,3,5],[2,5,7]], target = 4 输出:false
解题思路:
算法原理:
这道题通过遍历二维数组来查找是否存在等于目标值的元素。
思路:
从二维数组的右下角开始,根据当前元素与目标值的大小关系进行移动。如果当前元素大于目标值,向上移动一行(i--
);如果当前元素小于目标值,向右移动一列(j++
);如果当前元素等于目标值,返回 true
。如果遍历完整个数组都没有找到等于目标值的元素,返回 false
。
代码分析:
在 minCost
方法中,使用两个指针 i
和 j
分别表示行和列的索引。通过一个 while
循环,根据比较结果移动指针,直到找到目标值或者确定不存在目标值。
时间复杂度:,其中 m
是二维数组的行数,n
是列数。在最坏情况下,需要遍历完整个数组的最右边一列和最下面一行。
空间复杂度:,只使用了固定的几个变量,空间开销恒定。
java代码:
package org.example;
public class LCR121 {
public static void main(String[] args) {
LCR121 lcr121 = new LCR121();
int[][] cost = new int[][]{{1,2,3},{4,5,6}};
System.out.println(lcr121.minCost(cost,6));
}
public boolean minCost(int[][] plants, int target) {
int i = plants.length - 1, j = 0;
while(i >= 0 && j < plants[0].length)
{
if(plants[i][j] > target) i--;
else if(plants[i][j] < target) j++;
else return true;
}
return false;
}
}
更多详细内容同步到公众号,感谢大家的支持!
每天都会给刷算法的小伙伴推送明日一题,并且没有任何收费项