• 刷题40(力扣1道题+牛客1道题)


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

    题目链接

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/partition-array-into-three-parts-with-equal-sum

    题目描述

    给你一个整数数组 A,只有可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false。

    形式上,如果可以找出索引 i+1 < j 且满足 (A[0] + A[1] + ... + A[i] == A[i+1] + A[i+2] + ... + A[j-1] == A[j] + A[j-1] + ... + A[A.length - 1]) 就可以将数组三等分。

     示例 1:

    输出:[0,2,1,-6,6,-7,9,1,2,0,1]
    输出:true
    解释:0 + 2 + 1 = -6 + 6 - 7 + 9 + 1 = 2 + 0 + 1

    示例 2:

    输入:[0,2,1,-6,6,7,9,-1,2,0,1]
    输出:false

    示例 3:

    输入:[3,3,6,5,-2,2,5,1,-9,4]
    输出:true
    解释:3 + 3 = 6 = 5 - 2 + 2 + 5 + 1 - 9 + 4
     提示:

    3 <= A.length <= 50000
    -10^4 <= A[i] <= 10^4

    重难点

    1. 求数组A的元素和sum。
    2. 遍历数组A的元素,判断元素之和有几个sum/3。
    3. 若sum != 0且num==3,或者 sum == 0且num > 2返回true。

    题目分析

    1. 求数组A的元素和sum;
    2. 如果sum可以被3整除,那么遍历数组A的元素,判断元素之和res是否等于sum/3,若等于,则num加1,res=0;
    3. 统计num的个数,若sum != 0,那么sum/3不为0,此时num==3才可以把数组分成3等分;若 sum == 0,那么num>2,数组都可以分成3等分,即:当sum != 0 && num==3,或者 sum == 0 && num > 2返回true;
    4. 其余返回false。
    /**
     * @param {number[]} A
     * @return {boolean}
     */
    var canThreePartsEqualSum = function(A) {
     let sum = 0;
        for(let i=0;i<A.length;i++){
           sum += A[i];
        }
        if(sum % 3 == 0){
            let res = 0;
            let num = 0;
            for(let j=0;j<A.length;j++){
                res += A[j];
                if(res == sum/3){
                    res = 0;
                    num++;
                }
            }
            if((sum != 0 && num == 3) || (sum == 0 && num > 2)){
                return true;
            }else {
                return false;
            }
        }else {
            return false;
        }
    };
    

    可把返回语句简写:

    /**
     * @param {number[]} A
     * @return {boolean}
     */
    var canThreePartsEqualSum = function(A) {
     let sum = 0;
        for(let i=0;i<A.length;i++){
           sum += A[i];
        }
            let res = 0;
            let num = 0;
            for(let j=0;j<A.length;j++){
                res += A[j];
                if(res == sum/3){
                    res = 0;
                    num++;
                }
            }
            return (sum != 0 && num == 3) || (sum == 0 && num > 2);  
    };
    

    73. 连续子数组的最大和

    题目链接

    https://www.nowcoder.com/practice/459bd355da1549fa8a49e350bf3df484?tpId=13&&tqId=11183&rp=26&ru=/activity/oj&qru=/ta/coding-interviews/question-ranking

    题目描述

    HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1)

    题目分析

    1. 设置变量max存放最大值,并赋初值为array[0];
    2. 遍历数组,求和sum,若当前求和小于当前元素,令sum等于当前元素;
    3. 比较sum和max的大小,若sum>max,max=sum。
    function FindGreatestSumOfSubArray(array)
    {
        let sum = 0;
        let max = array[0];
        for(let i=0;i<array.length;i++){
            sum += array[i];
           if(sum < array[i]){
                sum = array[i];
            }
            if(sum > max){
                max = sum;
            }
        }
        return max;
    }
    

      

     

  • 相关阅读:
    使用MRS CDL实现实时数据同步的极致性能
    调用华为云GES服务业务面API相关参数的获取
    华为云数据库战略启示录
    华为云TICS解决联邦计算过程中的流程感知问题
    华为云DLI Flink作业生产环境推荐配置指导
    深入跨国互联网业务场景谈华为云数智融合元数据的“五个统一”
    教你如何将华为云CDN日志转存到OBS
    华为云CDN如何加速ECS资源?
    Jmeter压测工具使用之HetuEngine压力测试
    扒一扒GES如何赋能互联网电商风控
  • 原文地址:https://www.cnblogs.com/liu-xin1995/p/12464067.html
Copyright © 2020-2023  润新知