天池 在线编程 三等分(模拟)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

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

如果可以做到,请返回任何 [i, j],其中 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, -1]。

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

3 <= A.size <= 30000
A[i] = 0  or  A[i] = 1示例
样例 1:
输入:[1,0,1,0,1]
输出:[0,3]样例 2:
输出:[1,1,0,1,1]
输出:[-1,-1]

https://tianchi.aliyun.com/oj/245867719779445300/277517718521058001
https://leetcode-cn.com/problems/three-equal-parts/

2. 解题

  • 就是检查每个部分尾部的0的个数一样,确定开始结束位置,见注释
class Solution {
public:/*** @param A: an array* @return: divide the array into 3 non-empty parts*/vector<int> threeEqualParts(vector<int> &A) {// write your code hereint sum = accumulate(A.begin(), A.end(), 0);if(sum%3 != 0)//1的个数不能整除3return {-1,-1};int i, j, part = sum/3, one = 0, tail0 = 0, n = A.size();if(part == 0)//没有1return {0,2};for(i = n-1; i >= 0; --i){if(A[i] == 1)one++;else{if(one==0)tail0++;//第三部分的尾部0个数}if(one == part)break;}int mid0 = 0, start = i;//start 为第三部分的可能开始点for(i--; i>=0 && A[i] != 1; i--){mid0++;//第二第三部分中间的0的个数}if(mid0 < tail0)//第二部分尾0的个数不能跟第三部分尾0一样多return {-1,-1};start -= mid0-tail0;//分一部分前置0给第三部分int count = 0;for(i = start-1, j = n-1; i >= 0; --i,--j){   // 比较 第二第三部分是否一样if(A[i]==1) count++;if(A[i] != A[j])return {-1,-1};if(count == part)//1的个数够了,跳出break;}mid0 = 0;int start1 = i;//第二分部可能的开始位置for(i--; i>=0 && A[i] != 1; i--){mid0++;//第一第二部分中间的0的个数}if(mid0 < tail0)//同上return {-1,-1};count = 0;start1 -= mid0-tail0;//第二部分开始的位置for(i = start1-1, j = n-1; i >= 0; --i,--j){if(A[i] == 1) count++;if(A[i] != A[j])return {-1,-1};if(count == part)break;}return {start1-1, start};//第一部分结束,第三部分开始}
};

50ms C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python设计模式之模板方法模式实例详解

1、模板方法模式定义 定义一个操作中的算法的框架&#xff0c;而将一些步骤延迟到子类中&#xff0c;使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定的步骤。 子类实现的具体方法叫作基本方法&#xff0c;实现对基本方法高度的框架方法&#xff0c;叫作模板方…

小米2s自带rec刷root_刷Magisk模块开机卡Logo了怎么办?两种方法教你轻松解决

虽然&#xff0c;Magisk由于工作原理的不同&#xff0c;其模块对系统的兼容性相比较于此前的Xposed框架模块要好得多&#xff0c;但是依旧有可能出现刷了模块之后&#xff0c;卡Logo&#xff0c;无法开机的情况。今天&#xff0c;小编就提供两种方式解决刷Magisk模块卡开机Logo…

proteus如何添加stm32_电路仿真软件详谈(六),Proteus电路仿真软件的超级应用

一款优秀的电路仿真软件&#xff0c;可帮助用户更好实现相应功能&#xff0c;而Proteus电路仿真软件便是这样一款利器。本文中&#xff0c;将讲解基于Proteus电路仿真软件的SPI接口的设计与实现。通过本文&#xff0c;希望大家对Proteus电路仿真软件的应用具备深层次的理解。1、…

LeetCode 803. 打砖块(并查集)

文章目录1. 题目2. 解题1. 题目 有一个 m x n 的二元网格&#xff0c;其中 1 表示砖块&#xff0c;0 表示空白。 砖块 稳定&#xff08;不会掉落&#xff09;的前提是&#xff1a; 一块砖直接连接到网格的顶部&#xff0c;或者至少有一块相邻&#xff08;4 个方向之一&#x…

python设计模式之享元模式

一、享元模式定义&#xff1a; 享元模式是一种用于解决资源和性能压力时会使用到的设计模式&#xff0c;它的核心思想是通过引入数据共享来提升性能。 在开发3D游戏时&#xff0c;例如有成千上万的士兵或者有成千上万棵树&#xff0c;如果一个3D地带的每个对象都单独创建&…

allegro多版本安装_Homebrew 安装旧版本软件包马克

大家好我叫乌图米&#xff0c;我会在这里陆续跟大家分享一些有的没的数码体验、软件技巧、系统知识&#xff0c;欢迎大家留言与我交流&#xff5e;如果你喜欢文章的内容&#xff0c;可以在文末点个赞 &#xff0c;你的支持就是我最大的动力 &#xff01;这篇文章介绍一下 Homeb…

利用Python实现PDF转文本,就是如此简单!

一、前言 对很多人来说&#xff0c;将PDF转换为可编辑的文本是个刚需&#xff0c;却苦于没有简单的方法。发现 pdf 幻灯片&#xff0c;效果还不错。 传统的讲座通常伴随有很多pdf幻灯片。一般来说&#xff0c;想要对自己的讲座做笔记&#xff0c;需要从pdf复制、补充大量内容…

LeetCode 1725. 可以形成最大正方形的矩形数目

文章目录1. 题目2. 解题1. 题目 给你一个数组 rectangles &#xff0c;其中 rectangles[i] [li, wi] 表示第 i 个矩形的长度为 li 、宽度为 wi 。 如果存在 k 同时满足 k < li 和 k < wi &#xff0c;就可以将第 i 个矩形切成边长为 k 的正方形。 例如&#xff0c;矩形…

Python实现给指定的微信朋友发信息

一、环境准备 1、Python3.6 2、itchat第三方库 pip install itchat-uos 3、pyinstaller第三方库 pip install pyinstaller 二、核心代码 import itchatimport timeprint("请扫描弹出的扫二维码")itchat.auto_login(hotReloadTrue)boom_name input("请输…

LeetCode 1726. 同积元组(排列组合)

文章目录1. 题目2. 解题1. 题目 给你一个由 不同 正整数组成的数组 nums &#xff0c;请你返回满足 a * b c * d 的元组 (a, b, c, d) 的数量。其中 a、b、c 和 d 都是 nums 中的元素&#xff0c;且 a ! b ! c ! d 。 示例 1&#xff1a; 输入&#xff1a;nums [2,3,4,6] 输…

vuedraggle choose_如何拆分员工工资条,教你一招一学就会。(五)函数CHOOSE

作为人事管理者&#xff0c;我们最重要的一个工作就是工资表&#xff0c;那么如何将工资表拆分成工资条呢&#xff1f;我们最后看一下函数CHOOSE对函数MOD、ROW、OFFSET 、INT的嵌套使用。第一步&#xff0c;我们输入函数CHOOSE&#xff0c;第一个值是序号&#xff0c;我们将之…

用pythone画棵圣诞树,祝大家圣诞快乐

一、python环境&#xff1a; 根据电脑的情况去下载对应的python安装包&#xff0c;我使用的是python3.7.0的版本 二、python编译器&#xff1a; 打开pycharm&#xff0c;然后我们创建一个project&#xff0c;在project下创建一个python file&#xff0c;建议取名字不要使用中…

LeetCode 1727. 重新排列后的最大子矩阵(前缀和+排序)

文章目录1. 题目2. 解题1. 题目 给你一个二进制矩阵 matrix &#xff0c;它的大小为 m x n &#xff0c;你可以将 matrix 中的 列 按任意顺序重新排列。 请你返回最优方案下将 matrix 重新排列后&#xff0c;全是 1 的子矩阵面积。 示例 1&#xff1a; 输入&#xff1a;ma…

亚马逊出的平板电脑_亚马逊Fire HD 8 Plus评测:适合看视频和轻度游戏的廉价平板...

导语&#xff1a;近日&#xff0c;亚马逊升级了旗下的Fire HD 8和Fire HD 8 Plus平板电脑&#xff0c;使其具有更多的内存&#xff0c;更快的处理器和USB-C充电功能。亚马逊Fire HD 8 Plus是Fire HD 8 的一个增强版本&#xff0c;它提供了较HD8更快的速度&#xff0c;拥有一些通…

利用python转换图片格式

前言 常见的图像任务通常需要把照片统一成相同的格式&#xff0c;所以此文章正是为了统一格式而生&#xff0c;常见的主要有cv2和PIL.Image的相关操作&#xff0c;照片格式是一串数字加上后缀名 工具一&#xff1a;cv2 pip install opencv-python 之后就可以 import cv2 1.…

苹果台式机_苹果史上最强台式机来了:顶配售价45万

12月11日消息&#xff0c;国行版Mac Pro正式在苹果官网上架开售。根据苹果官网显示&#xff0c;Mac Pro最基础版本需要花费47999元&#xff0c;基础版Mac Pro配置上采用3.5GHz 8核Intel Xeon W处理器&#xff0c;32GB (4x8GB) DDR4 ECC内存&#xff0c;Radeon Pro 580X图形处理…

LeetCode 1489. 找到最小生成树里的关键边和伪关键边(并查集+kruskal最小生成树)

文章目录1. 题目2. 解题1. 题目 给你一个 n 个点的带权无向连通图&#xff0c;节点编号为 0 到 n-1 &#xff0c;同时还有一个数组 edges &#xff0c;其中 edges[i] [fromi, toi, weighti] 表示在 fromi 和 toi 节点之间有一条带权无向边。 最小生成树 (MST) 是给定图中边的…

斯特林发动机图纸尺寸_南昌教学模型订做,航空发动机模型_境海模型

首页 > 新闻中心发布时间&#xff1a;2020-11-08 13:57:07 导读&#xff1a;境海模型为您提供南昌教学模型订做,航空发动机模型的相关知识与详情&#xff1a; 曾经的沙盘模型一般只有模型自身&#xff0c;没有现代的视觉作用例如&#xff1a;灯火声音形象等动态的作用。景观…

app inventor离线版_小鸡漫画app手机版下载_小鸡漫画好看的漫画手机版下载

小鸡漫画app手机版&#xff0c;是一款无限量看漫画的阅读软件。小鸡漫画app手机版为喜欢看漫画的用户带来超多好看、热门、经典的漫画集&#xff0c;在这里看漫画没有乱七八糟和漫画无关的东西打扰。小鸡漫画app手机版方便看漫画&#xff0c;让一个人的你不再孤单&#xff0c;午…

LeetCode 963. 最小面积矩形 II

文章目录1. 题目2. 解题1. 题目 给定在 xy 平面上的一组点&#xff0c;确定由这些点组成的任何矩形的最小面积&#xff0c;其中矩形的边不一定平行于 x 轴和 y 轴。 如果没有任何矩形&#xff0c;就返回 0。 示例 1&#xff1a; 输入&#xff1a;[[1,2],[2,1],[1,0],[0,1]…