范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

202316给定一个由0和1组成的数组arr,将数组分成3个非空的

  2023-03-16:给定一个由 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] 表示相同的值。
  输入:arr = [1,0,1,0,1],
  输出:[0,3]。
  输入:arr = [1,1,0,0,1],
  输出:[0,2]。
  答案2023-03-16:
  给定一个由 0 和 1 组成的数组 arr,需要将其分成三个非空部分,使得每个部分中 1 的数量相等。如果无法做到,则返回 [-1, -1]。
  输入:由 0 和 1 组成的数组 arr,长度为 n(1   n   3 10^4),且只包含数字 0 和 1。
  输出:长度为 2 的数组,表示能够将 arr 分成三个部分 第一个和第二个部分的结束位置(下标从 0 开始)。如果无法做到则返回 [-1, -1]。
  解法思路:
  首先统计整个数组中 1 的数量 ones,如果 ones 不能被 3 整除,则说明无法分成三个相等的部分,直接返回 [-1, -1]。
  如果 ones 等于 0,则整个数组都是 0,可以返回 [0, n-1]。
  接着需要找到第一个、第二个和第三个部分的起始位置。根据题意,第一个部分和第二个部分的 1 的数量应该是 ones/3,因此可以先计算出目标值 part = ones/3,然后从左到右遍历整个数组,在找到第一个和第二个部分之后,继续遍历找到第三个部分的起始位置。
  接下来检查第三个部分是否也等于目标值 part。如果是,则返回 [end1, end2],否则返回 [-1, -1]。
  rust代码实现: fn main() {     let arr1 = vec![0, 0, 0, 0, 0];     println!("{:?}", three_equal_parts(arr1)); // [0, 4]       let arr2 = vec![1, 0, 1, 0, 1, 0];     println!("{:?}", three_equal_parts(arr2)); // [1, 4]       let arr3 = vec![1, 0, 1, 0, 1];     println!("{:?}", three_equal_parts(arr3)); // [0, 3]       let arr4 = vec![1, 0, 1, 1, 1];     println!("{:?}", three_equal_parts(arr4)); // [-1, -1]       let arr5 = vec![0, 1, 0, 1, 0, 1, 0, 1, 0, 1];     println!("{:?}", three_equal_parts(arr5)); // [-1, -1]       let arr6 = vec![1, 1, 0, 1, 1, 0, 1, 1];     println!("{:?}", three_equal_parts(arr6)); // [1, 5] }   pub fn three_equal_parts(arr: Vec) -> Vec {     let ones = arr.iter().filter(|&num| *num == 1).count(); // 统计数组中 1 的个数     if ones % 3 != 0 {         // 如果无法分成三个相等的部分,则返回 [-1, -1]         return vec![-1, -1];     }     let n = arr.len();     if ones == 0 {         // 如果整个数组都是 0,则返回 [0, n-1]         return vec![0, n as i32 - 1];     }     let part = ones / 3; // 计算每个子数组中 1 的数量     let mut start1 = -1; // 第一个子数组的起始位置     let mut start2 = -1; // 第二个子数组的起始位置     let mut start3 = -1; // 第三个子数组的起始位置     let mut cnt = 0; // 当前已经遇到的 1 的数量     for i in 0..n {         if arr[i] == 1 {             cnt += 1;             if start1 == -1 && cnt == 1 {                 start1 = i as i32; // 找到第一个子数组的起始位置             }             if start2 == -1 && cnt == part + 1 {                 start2 = i as i32; // 找到第二个子数组的起始位置             }             if start3 == -1 && cnt == 2 * part + 1 {                 start3 = i as i32; // 找到第三个子数组的起始位置             }         }     }     while start3 < n as i32 {         if arr[start1 as usize] != arr[start2 as usize]             || arr[start1 as usize] != arr[start3 as usize]         {             return vec![-1, -1]; // 如果找到的三个子数组不相等,则返回 [-1, -1]         }         start1 += 1;         start2 += 1;         start3 += 1;     }     vec![start1 - 1, start2] // 返回第一个和第二个子数组的结束位置 }
  算法分析:
  该算法的时间复杂度为 O(n),其中 n 是输入数组的长度,因为需要遍历整个数组一次。空间复杂度为 O(1),只需要常量级别的额外空间存储一些变量。该算法的优点是简单易懂,缺点是可能会超时,比如当输入数组中有很多连续的 1 时。可以通过进一步优化算法来提高效率。
  测试结果:
  1.测试用例:[0,0,0,0,0],预期输出:[0, 4]。
  ```rust
  assert_eq!(three_equal_parts(vec![0,0,0,0,0]), vec![0, 4]);
  ```
  2.测试用例:[1, 0, 1, 0, 1, 0],预期输出:[1, 4]。
  ```rust
  assert_eq!(three_equal_parts(vec![1, 0, 1, 0, 1, 0]), vec![1, 4]);
  ```
  3.测试用例:[1, 0, 1, 0, 1],预期输出:[0, 3]。
  ```rust
  assert_eq!(three_equal_parts(vec![1, 0, 1, 0, 1]), vec![0, 3]);
  ```
  4.测试用例:[1, 0, 1, 1, 1],预期输出:[-1, -1]。
  ```rust
  assert_eq!(three_equal_parts(vec![1, 0, 1, 1, 1]), vec![-1, -1]);
  ```
  5.测试用例:[0, 1, 0, 1, 0, 1, 0, 1, 0, 1],预期输出:[-1, -1]。
  ```rust
  assert_eq!(three_equal_parts(vec![0, 1, 0, 1, 0, 1, 0, 1, 0, 1]), vec![-1, -1]);
  ```
  6.测试用例:[1, 1, 0, 1, 1, 0, 1, 1],预期输出:[1, 5]。
  ```rust
  assert_eq!(three_equal_parts(vec![1, 1, 0, 1, 1, 0, 1, 1]), vec![1, 5]);
  ```
  总结和展望:
  本文介绍了一种简单的算法,可以解决给定一个由 0 和 1 组成的数组 arr,需将其分成三个非空部分,使得每个部分中 1 的数量相等的问题。该算法的核心思路是计算目标值 target_val,并在遍历整个数组两次的过程中找到第一个和第二个部分的结束位置 i 和 j。该算法的时间复杂度为 O(n),空间复杂度为 O(1)。
  有一些情况下该算法可能会超时,比如当输入数组中有很多连续的 1 时。可以通过进一步优化算法来提高效率。例如,可以使用双指针来记录第一个和第二个部分的结束位置,从而减少遍历数组的次数。另外,可以使用位运算来加速计算当前部分的二进制数值。
  总之,对于此类问题,需要先分析题目要求,找到合适的算法思路,再实现具体的代码。在实现代码时,需要注意代码的可读性、正确性和效率,并进行充分的测试和验证。同时,也需要不断学习和探索新的算法思路,以提高自己的编程能力和解决问题的能力。

华为Mate50都要发布了,还有人要买Mate40?华为Mate50和iPhone14!到时候数码博主们肯定会拿来做对比评测的。但是采用骁龙8的Mate50系列很难会有特别的好的体验,相机上也没办法做出大的进步。所以说Mate50可折叠屏迈入第4个年头,真的会成为智能手机内卷的救星吗?2022年,三星即将发售自己的新一代折叠屏手机GalaxyZFlip4折叠屏这一智能手机新物种已经开启了它第四个年头的征战随着这几年折叠屏技术不断地突破,厂商相继推出属于自己的折叠政企联合促消费成效显著,海尔智家67月零售逆增20为拉动家电及上下游关联产业发展,助力稳定宏观经济大盘,商务部等13部门印发了关于促进绿色智能家电消费若干措施的通知,随后,海尔智家率先响应政府号召,在商务部启动的2022全国家电消战法空头陷进一形态特征所谓空头陷进,简单地说,就是主力通过打压股价,佯装空头行情,目的是引诱散户在低位恐慌性抛货,主力自己则趁机在低位入货。这是主力故意设置的一个圈套,是人为制造的一种假象,并枭雄黄光裕向现实低了头18个月梦想成空,活下去成首要目标撰文财经天下周刊作者何畅李丹魏一宁编辑陈芳18个月时间过去后,立下宏图大志的黄光裕,最终没能如约带领国美重回往日的巅峰。相反在疫情自身等多重因素影响下,黄光裕现如今面临的局面更为艰从零开始学K线老鸭头实战技巧关于老鸭头的知识,昨天已经介绍过了。重点来讲一下当下的一个情况。老鸭头上图是创业板的走势,看上去好像符合老鸭头的形态,但是细看,这个地方是很危险的鸭头不够圆润鸭鼻孔太大了鸭嘴巴张不先求稳再求好,让你的财富稳健增值案例小王工作6年在某公司担任项目经理,年收入有30万。买了车,平时房子租得也比较好,消费比较高,经常下馆子。由于平常不注意开源节流,导致自己6年也没存下什么钱,存的钱由于自己的喜好恒瑞医药国产医药旗帜业绩又扑街了丨智氪点评作者黄绎达编辑郑怀舟封面来源视觉中国8月19日,恒瑞医药(证券代码600276,以下简称恒瑞)公布了2022年半年度报告。恒瑞在今年上半年实现收入102。28亿元,同比下降23。0坚持稳健货币政策,增强中国经济发展韧性鄢杰中国人民大学长江经济带研究院高级研究员西南财经大学财税学院博士生导师国家统计局近日发布的经济数据显示,中国7月份全国居民消费价格指数(CPI)达102。7,同比增长2。7,核心A股怎么看光伏行业的机会?两大结论来解释导读一般来说,周末的消息面会在周五六基本出来,所以,今天也就没什么基本面的消息了,我们昨天谈了指数的技术面和消息面,今天,我们要讨论的是行业资金,同时,还会借着近期消息众多的新型能机会来了!湖人可用浓眉换状元3D,这是一笔双赢的交易20年季后赛,浓眉在场均17。1次出手下投出了66。5的真实命中率。这在场均回合使用率超过20的44名球员里,仅次于伊巴卡的70。2。如果浓眉以此为基础继续进步的话,那么球迷期盼和
登炮组合有望重聚!76人太阳交易方案曝光,总冠军稳了?重磅消息!唯一能带队和五星宇宙勇打到抢七的登炮组合很可能要重聚了,这个消息太疯狂了,估计恩比德要懵圈了,真把18年的火箭搬过来了?是不是真的该改名叫作费城火箭队了?这到底是谁的球队风衣到底该配裙子,还是裤子?其实按照这样的搭配,更时髦好看穿风衣的女人最帅气,穿风衣不仅将瑟瑟寒风抵御在外。而且彰显一个人的品味和气场。我们总是习惯性地以一个人的穿着品味来判断她的审美和性格,所以风衣穿对了不仅悦人悦己,整个人更是熠熠生辉小快灵的组合体验富士X600mmF5。68RLMOISWR作者我是扳手富士相机最近发布了X系列的旗舰级产品XH2S以及超长焦变焦镜头XF150600mmF5。68RLMOISWR镜头。这套装备整体来看算是集轻巧快速精准于一身。发布没多久就库兹马谈穿搭我不关心别人的意见,我觉得我这样穿很好看近日,奇才球员凯尔库兹马代表自己代言的彪马品牌参加纽约时装周表演,他在走秀台上大胆前卫的穿搭也引起了轰动。随后库兹马接受了Complex杂志的采访,在采访中主持人问到了库兹马对于自爆热搜!iPhone6s升iOS15。7续航表现惊艳,更丝滑,必须升级养老iOS15。7正式版已经发布有一周时间了,这或将是iOS15最后的系统,苹果专为老机型打造,带来了不错的优化效果,那么iPhone6s升级到iOS15。7体验到底怎么样呢?能否再战中国真正的隐形首富手握全球十万亿矿产,一年进账6919亿在阅读此文之前,麻烦您点击一下关注,既方便您进行讨论与分享,又给您带来不一样的参与感,感谢您的支持!马云王健林,明面上的富豪很多,可你知道谁才是中国真正的隐形首富吗?他曾是同学们嘲技术性失业,就业结构两极化数字化将如何影响我们的工作?毋庸置疑,数字经济已成为我国经济增长最为活跃的部分之一,正深刻影响我国就业结构与就业质量。数字化的逐步深入,将会对就业结构产生哪些冲击?雇佣关系将有何种变化?01就业的时空限制被进孕妇便秘10天,药物水果都没用,胆大医生用番泻叶一次搞定一孕妇怀孕5个月,某天下午发现阴道有水一样的东西流出,打湿内裤,去医院检查,发现有羊水结晶存在,医生怀疑胎膜早破,遂要求卧床住院。因为过多的走动可能再次引起羊水流出,所以她只能每天网约车聚合平台如何健康发展?高德打车以规范强效助力随着社会经济的不断发展,越来越多的人在出行时都倾向于选择更加快捷方便的出行方式,除了自驾公共交通共享出行等方式之外,网约车近年来也成为出行板块的中坚力量。根据网约车监管信息交互平台VM概述内存结构溢出调优什么是JVM?定义JavaVirtualMachinejava程序的运行环境(java二进制字节码的运行环境)好处一次编写,到处运行自动内存管理,垃圾回收功能数组下标越界检查多态j腾讯入股鱼跃医疗子公司,看上国产的救命神器AED记者陈杨编辑谢欣9月19日,鱼跃医疗发布公告称,其全资子公司讯捷医疗拟以增资扩股的方式,引进战略投资者腾讯。腾讯将以现金出资2。91亿元认购前者的新增注册资本。增资后,鱼跃医疗腾讯孩子反复积食发烧咳嗽怎么办?儿童中医保健门诊有妙招孩子经常出现积食发烧咳嗽便秘且反反复复很难去根除了控制饮食加强锻炼不妨去西安大兴医院儿童保健科儿童中医保健门诊加强日常保健儿童保健科以不治已病治未病为原则,开展儿童中医预防保健和疾这才是土豆最好吃的做法,不炒也不炖,出锅营养丰富又美味,真香国以民为本,民以食为天,各位老饕大家好!今天给大家教一个土豆丝鸡蛋早餐饼,方法简单,食材也很普通,但是做好了吃起来酥软咸香,营养美味,特别适合早上吃。大家快和我一起做给家人吧!土豆做青椒炒鸡蛋时,很多人把顺序做错,怪不得鸡蛋不嫩,青椒还发黄导读说起青椒炒鸡蛋这道家常菜,让我想起最开始学厨时,师傅经常给我们说不管做什么菜,都要讲究一个顺序,如果顺序都没有做对,再好的食材,都会做得不好吃,所以从学徒开始,我做菜最讲究一个入秋后,吃红薯南瓜不如吃它,现在正当季,营养极高,别不懂吃导语立秋后,遇见这菜别手软!营养极高,全身是宝,一蒸一煮爽滑有嚼劲,大人孩子都爱吃!大家好,我是傻姐美食,生活中唯有美食和美景不可辜负。常言道白露秋风夜,一夜凉一夜。白露过后明显感煮鸡蛋时,是冷水下锅还是热水下锅?牢记2点,鸡蛋壳一碰就掉大家好,我是大雄,每天早上煮两个鸡蛋吃一吃,就能让自己元气满满,但是在煮鸡蛋的时候,是用冷水煮,还是热水煮才最佳呢?今天就让我来给你说说,煮鸡蛋时的2个关键技巧,这样煮出来的鸡蛋,秋天,少吃猪肉牛肉,多吃这肉,鲜嫩营养,滋养补津好处多导语秋天,少吃猪肉牛肉,多吃这肉,鲜嫩营养,滋养补津,好处多多,你吃过吗?大家好,我是爱做饭的玲子,一位热爱美食,享受烹饪的山东大妞。玲子与大家分享美食,用简单的食材烹饪家常菜,用殡仪师披露玛丽莲梦露的心酸细节下葬前曾为她穿衣服一想起玛丽莲梦露,不少人脑海里都会自动浮现这样的一个形象一头金色的微卷短发,曼妙妖娆的身姿,身着一袭白裙,地下管道的热气将她的裙摆吹成一只喇叭花,然后她弯腰昂头捂住裙子的性感模样。可拉佩尔茨身着一袭白色低胸连衣裙,打破在家庭不和的谣言在丈夫布鲁克林贝克汉姆拍摄的一系列照片中,妮可拉佩尔茨身着一袭白色低胸连衣裙,在家庭不和的谣言中惊艳亮相妮可拉佩尔茨被丈夫布鲁克林贝克汉姆拍摄的一系列照片惊艳了所有人。这位初露头角优骼之窗这几类常见的生活用品,家中有小孩的谨慎使用优骼家中有小孩的,家长们总是会在各方各面都警惕着孩子可能会碰到的安全隐患。但你知道吗,这几类常见的生活用品,如果使用不当也会给孩子带来伤害,家长们一定要留心了!一杀虫剂市面上常见的真正厉害的人,都是反敏感体质你身边有没有这样的人?别人随口一句话,Ta就格外上心,反复琢磨对方是不是另有他意。别人一个不经意的举动,Ta就会情绪波动,脑补出无数原因。甚至是一条回慢了的消息,Ta也忍不住胡思乱换季了,皮肤敏感泛红怎么办?教你几招,轻松搞定希望这个秋天你我不再轻易脸红。秋天,是一个让人容易脸红的季节,从换季开始,不少妹子都会遭遇皮肤敏感泛红等问题。在很多人的概念中,80左右的皮肤问题都可以用过敏烂脸来概括,但实际上,