前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Leetcode题解——941/1013

Leetcode题解——941/1013

作者头像
出其东门
发布2019-07-23 15:29:15
4840
发布2019-07-23 15:29:15
举报
文章被收录于专栏:01二进制

941. 有效的山脉数组

题目

https://leetcode-cn.com/problems/valid-mountain-array/

题解

山脉数组就是前期是递增序列,后期是递减序列的数组,所以刚开始可以设置两个标志符,分别表示上升和下降。

如果在上升序列时发现down是true,那么就返回false,同理,如果是下降序列时发现up是true,也return false,最后取二者交集即可

代码

代码语言:javascript
复制
public class Main {
    public static void main(String[] args) {
        Main main = new Main();
        int[] a = {0, 3, 2, 1};
        System.out.println(main.validMountainArray(a));
    }

    public boolean validMountainArray(int[] A) {
        boolean up = false;
        boolean down = false;
        for (int i = 0; i < A.length - 1; i++) {
            if (A[i] - A[i + 1] < 0) {
                if (down) return false;
                up = true;
            } else if (A[i] - A[i + 1] > 0) {
                if (!up) return false;
                down = true;
            } else {
                return false;
            }
        }
        return up && down;
    }
}

1013. 将数组分成和相等的三个部分

题目

https://leetcode-cn.com/problems/partition-array-into-three-parts-with-equal-sum/

题解

题目要求分成和相等的三分,所以我们需要先数组的和

代码语言:javascript
复制
public int sumOfArr(int[] A) {
    int sum = 0;
    for (int x : A) {
        sum += x;
    }
    return sum;
}

求和之后我们在判断是否可以等分成3份,如果不可以直接返回false,如果可以,进行下一步。

因为要分成三份,我们可以找出首末两份,flag1表示能否找出3等份的第一份,index表示找到的第一份的下标,然后遍历即可,如果找到flag1=true,并记录下index。此时进行第三份的查找,我们需要从后往前找,如果flag1=true,那么从后往前找的边界就是index,找到了返回true,代码如下:

代码

代码语言:javascript
复制
public class Main {

    public static void main(String[] args) {
        Main main = new Main();
        int[] A = {18, 12, -18, 18, -19, -1, 10, 10};
        System.out.println(main.canThreePartsEqualSum(A));
    }

    public boolean canThreePartsEqualSum(int[] A) {
        int sum = sumOfArr(A);
        if (sum % 3 != 0) return false;

        int temp = 0;
        boolean flag1 = false;
        int index = 0;

        for (int i = 0; i < A.length - 1; i++) {
            temp += A[i];
            if (temp == sum / 3) {
                flag1 = true;
                index = i;
                break;
            }
        }

        boolean flag2 = false;
        temp = 0;
        if (flag1) {
            for (int i = A.length - 1; i > index; i--) {
                temp += A[i];
                if (temp == sum / 3) {
                    flag2 = true;
                    break;
                }
            }
        }
        return flag1 && flag2;
    }

    public int sumOfArr(int[] A) {
        int sum = 0;
        for (int x : A) {
            sum += x;
        }
        return sum;
    }
}

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 01二进制 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 941. 有效的山脉数组
    • 题目
      • 题解
        • 代码
        • 1013. 将数组分成和相等的三个部分
          • 题目
            • 题解
              • 代码
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档