leetcode刷题--941有效的山脉数组

leetcode刷题–941有效的山脉数组
研究生最后一年,找了份软件开发的工作,深知自己的代码能力很弱,为了把工作时候的压力分担到现在,从现在开始刷leetcode吧,每天不多,就一题。但是要充分掌握与理解。

题目就不记录了,随便一搜都可以搜到。
我的解:
class Solution {
public boolean validMountainArray(int[] A) {
boolean flag1=true;
boolean flag2=true;
if(A.length<3){
return false;
}
int max=A[0];
int k=0;
//找出最大值
for (int i=1;i<A.length;i++){
if (A[i]>max){
max=A[i];
k=i;
}
}
if (kA.length-1 || k0){
return false;
}
//判断它之前是否是一个有序递增数组
for (int i=0;i<k;i++){
if (A[i]>A[i+1]||A[i]==A[i+1]){
flag1=false;
}
}
//判断它之后是否是一个有序递减数组
for (int i=k+1;i<A.length;i++){
if (A[i-1]<=A[i]||A[i-1]==A[i]){
flag2=false;
}
}
return flag1 && flag2;
}
}
思路:先找出这个数组的最大值,然后判断它前面的数是否构成一个有序递增数组,它后面是否构成一个有序递减数组。
出现的小问题:
①int max=A[0]; 刚开始时放在了“判断数组长度小于3则返回false”的前面,IDEA不会报错,但是leetcode报错,因为如果数组长度为0的话,就会出现ArrayIndexOutOfBoundsException错误。
②忘记了当最大值处于数组两端时候的情况。

别人的优秀答案:
在这里插入图片描述
public boolean validMountainArray(int[] A){
int len=A.length;
int left=0;
int right=len-1;
while (left<len-1&&A[left]<A[left+1]){
left++;
}
while (right>0&&A[right]<A[right-1]){
right–;
}
return left>0 && right<len-1 && left==right;
}

重点:注意while的循环条件。left可以到达len-1,right也可以到达0.所以return时需要考虑left和right是否在边界的情况。

反思:如果需要对数组进行遍历来解决问题的话,可以考虑此双指针的方法。比如说快速排序。
新手刷题,请轻喷。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值