首页 > 其他分享 >困难-927. 三等分

困难-927. 三等分

时间:2022-10-06 14:35:30浏览次数:38  
标签:... arr 相等 示例 困难 三等分 let 长度 927

日常做题 找规律,首先:分成3段     //为1的长度必须相等,长度区间内的字符也要相等     //长度区间往后面加0的长度也得相等

给定一个由 0 和 1 组成的数组 arr ,将数组分成  3 个非空的部分 ,使得所有这些部分表示相同的二进制值。

如果可以做到,请返回任何 [i, j],其中 i+1 < j,这样一来:

arr[0], arr[1], ..., arr[i] 为第一部分;
arr[i + 1], arr[i + 2], ..., arr[j - 1] 为第二部分;
arr[j], arr[j + 1], ..., arr[arr.length - 1] 为第三部分。
这三个部分所表示的二进制值相等。
如果无法做到,就返回 [-1, -1]。

注意,在考虑每个部分所表示的二进制时,应当将其看作一个整体。例如,[1,1,0] 表示十进制中的 6,而不会是 3。此外,前导零也是被允许的,所以 [0,1,1] 和 [1,1] 表示相同的值。

 

示例 1:

输入:arr = [1,0,1,0,1]
输出:[0,3]
示例 2:

输入:arr = [1,1,0,1,1]
输出:[-1,-1]
示例 3:

输入:arr = [1,1,0,0,1]
输出:[0,2]
 

提示:

3 <= arr.length <= 3 * 104
arr[i] 是 0 或 1

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/three-equal-parts
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

/**
 * @param {number[]} arr
 * @return {number[]}
 */
var threeEqualParts = function(arr) {
    //找规律,首先:分成3段
    //为1的长度必须相等,长度区间内的字符也要相等
    //长度区间往后面加0的长度也得相等
    let eLen=0;
    let narr=[]
    for(let i=0;i<arr.length;i++){
        if(arr[i]===1){
            eLen++
            narr.push(i)
        }
    }
    if(eLen===0){
        return [0,arr.length-1]
    }else if(eLen%3!==0){
        return [-1,-1]
    }
    const d=eLen/3
    const pArr=[
        narr[0],narr[d-1]+1,
        narr[d],narr[d*2-1]+1,
        narr[d*2],narr[d*3-1]+1
    ]

    const str1=arr.slice(pArr[0],pArr[1]).join('')
    const str2=arr.slice(pArr[2],pArr[3]).join('')
    const str3=arr.slice(pArr[4],pArr[5]).join('')
    if(str1===str2&&str2===str3){
        if(pArr[5]===arr.length){
            return [pArr[1]-1,pArr[3]]
        }else{
            const len=arr.length-pArr[5]
            if(pArr[1]+len<=pArr[2]&&pArr[3]+len<=pArr[4]){
                return [pArr[1]-1+len,pArr[3]+len]
            }
        }
    }
    return [-1,-1]
};

 

标签:...,arr,相等,示例,困难,三等分,let,长度,927
From: https://www.cnblogs.com/caoke/p/16757561.html

相关文章

  • 第一道面试题 第一道困难题解答记录
    输入一个奇数n,输出一个由*构成的n阶实心菱形。输入格式一个奇数n。输出格式输出一个由*构成的n阶实心菱形。具体格式参照输出样例。数据范围1≤n≤99输......
  • 归纳学习(Inductive Learning),直推学习(Transductive Learning),困难负样本(Hard Neg
    归纳学习(InductiveLearning):顾名思义,就是从已有训练数据中归纳出模式来,应用于新的测试数据和任务。我们常用的机器学习模式就是归纳学习。直推学习(TransductiveLear......
  • Jenkins 20220927笔记本4
                          ......
  • SpringCloud重试retry 20220927
    SpringCloud重试retry是一个很赞的功能,能够有效的处理单点故障的问题。主要功能是当请求一个服务的某个实例时,譬如你的User服务启动了2个,它们都在eureka里注册了,那么正常情......
  • English words chapter 20220927
    作者:​DATA_MONK​​​......
  • 听完我的建议,Linux将不再困难
    这篇文章主要针对于正处于迷茫之时的初学者同学们,在Linux领域深耕多年的老工程师们请绕道。 首先我要对各位初入茅庐的初学者们说,学习Linux千万不要怕折腾。在学习过程......
  • Jenkins 20220927笔记本4
                          ......
  • English words chapter 20220927
    ......
  • lc_top_0927
    lc21合并两个有序链表/***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;*ListNode(){}*Li......
  • 20220927(平)
    20220927(平)t1[SCOI2009]生日快乐传送门思路​ 题目还是挺具有迷惑性的,至少我第一眼就以为是二分。然后就写了个二分,然而最后写出来是在二分里二分,又发现只有边长除......