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

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 时。可以通过进一步优化算法来提高效率。例如,可以使用双指针来记录第一个和第二个部分的结束位置,从而减少遍历数组的次数。另外,可以使用位运算来加速计算当前部分的二进制数值。
  总之,对于此类问题,需要先分析题目要求,找到合适的算法思路,再实现具体的代码。在实现代码时,需要注意代码的可读性、正确性和效率,并进行充分的测试和验证。同时,也需要不断学习和探索新的算法思路,以提高自己的编程能力和解决问题的能力。

A股上市游戏公司股价一跌再跌,游戏消费属于精神消费吗?2022年,手游行业依旧处于黄金年代。全球用户在2021年消费支出高达7343亿元。最近两年新上市的游戏公司越来越少了,不管是从2021年游戏版号的审核发放停滞,还是最近开始慢慢发加拿大的魁北克万只雪雁壮观南飞,最佳观赏期来临,地点攻略速存乐活蒙城加拿大蒙特利尔10月22日报道雪雁迁徙是加拿大魁省著名的自然景观之一,很多加拿大人都知道,每年的4月份是观赏雪雁的最佳时机。但并不知道10月底至11月初这段时间,也是另外一金钟奖红毯一言难尽,林心如礼服廉价,小S夸张,杨祐宁审美在线第57届金钟奖如期而至,今年和以往有所不同,竟然把综艺类和戏剧类分为两天举办。本以为是想一鸣惊人,没成想是虚张声势,明星阵容星光暗淡,综艺类红毯的压轴明星是小S,戏剧类红毯的压轴明小米13下巴窄荣耀80认证OPPO自研芯片iPhone14Pro屏幕得分疑似荣耀80系列通过3C认证近日,荣耀型号为FRIAN00FRIAN10的两款5G新机获3C认证,支持66W快充,消息称这是荣耀80系列新机。此前有媒体爆料了荣耀80系列的全新处理补钙补血补脑这些隐藏的营养王者,你家餐桌上有吗?随着人们越来越注重养生保健,喝牛奶补钙吃核桃补脑等知识也越来越深入人心。其实,生活中有些不起眼的食材可能更有优势!01hr绿叶菜,被忽视的高钙选手钙是人体必要的常量元素,孩子缺钙直文件怎么加密?电脑文件设置密码的方法信息时代,很多重要文件都被保存在电脑中,这就导致很容易出现文件泄密的情况。那么该如何为文件加密呢?超级加密3000是一款专业的数据加密软件,采用国际先进的加密算法,可以使加密数据到无法连接至steam网络?解决方法来了无法连接至steam网络?解决方法来了Steam是目前较为著名的游戏平台之一,它的游戏种类多质量优秀,受到了许多热爱游戏的玩家们的青睐。万圣节在即,steam也将在10月25日推出它是秋冬季节的小人参,可惜很多人都没吃对,白白浪费了营养萝卜赛过小人参冬吃萝卜夏吃姜,不劳医生开药方这一句句民间俗语足以说明萝卜在我国食疗文化中的重要地位。那萝卜究竟有哪些营养价值呢?品类繁多的萝卜,又该怎么选择呢?今天就一起来了解一番警惕!这类轻资产项目隐藏的三个大坑所有的心虚都是大张旗鼓,真正的坚强应不动声色!这句话在商业世界里我觉得特别有道理,尤其在动荡的市场环境下,那些喜欢收割韭菜的项目依然挥舞着暴利的大刀,他们的套路简单粗暴一成不变,利数字十年我国数字经济实现跨越式发展从11万亿增长到超过45万亿,十年间,我国数字经济规模跃上新台阶,为经济社会发展提供了强大动力。今天的中国,移动支付的触角遍及神州大地的每个角落,年交易规模达527万亿,领先全球的虎胆英雄林心平一人俘虏一个营,23岁尸骨无存坐落在温州江心屿上的温州革命烈士纪念馆,里面陈列着抗日英雄的痕迹,记录着每一位抗日英雄,他们都有着令人动容的故事,有些鲜为人知,有些广为流传。其中有一位巾帼英雄,国军将领称她为虎胆
柿子你喜欢吃软的还是脆的?柿子当然是软的好吃,苹果当然是硬的好吃,品种不同,吃法不一样。不是有句话说的好,柿子专拣软的捏吗。软柿子好吃,记住了啊。柿子还是脆的好吃,脆中带劲道懒柿子吃脆的。懒柿子的方法,各地大学的宿舍怎么样?舍友关系好吗?觉得性格合的话,就一起玩,不合的话,就各自过呗。反正我们寝室挺好的,和和乐乐过了四年收到这个问答,我感觉得来个长篇,因为室友基本每年都换,个别一学期一换,除了我和另外俩女生是铁三角从来没有喜欢的明星是什么感受?随着社会的发展电影电视剧观看的人数越来越少,反而玩手机的人越来越多,因为手机五花八门新闻新事特别多,而在手机里能看到都是真实故事,基本上忙碌的家庭电视根本都不打开,还得月月交昂贵的今天朋友的爸爸跟我说了个他的期望他喜欢使用空调,希望儿女们为他缴电费。过分吗?全年默默给父母冲话费,交水电费,冲天然气的人路过,顺便翻个白眼老公一个月三四千,房贷800,我全职带娃,孩子两岁,一辆汽车,然后他给他妈租房每个月750,交了一年房租,两家暖气费2请问板栗用什么方法可以轻松的剥下板栗皮呢?敲破如何轻松剥除板栗皮?每年到了十月份的时候,板栗就开始陆续成熟了。而在农夫的家里,也种植了几棵板栗树,一年也能收获近百斤的板栗。当板栗丰收回到家里以后,那最开心的事情就是把板栗做你在steam上见过降价最多的游戏是什么,降得有多狠?我理解的降价最多应该是降价前后的差价大,而不是降幅。100降幅所有限免喜加一单说降幅的话,Steam上很多喜加一限免都算是降幅100。比如说,太阳帝国的原罪,116元的3A级作品,全新MacBookPro性能那么强,买来玩游戏怎么样?洗洗睡吧,大部分游戏图形库都是微软的direcxt。而且apple的测试有一点误导性,Mac是用自己metal库跑的分,而win上使用辣鸡OpenGL图形库事实上没几个程序用这个东腾讯王者荣耀,为何使用亚瑟作为游戏图标?有何深意?为了让王者荣耀看起来更加的热血沸腾王者荣耀为何使用亚瑟这个英雄作为图标。王者荣耀这是一款推塔类的。Moba类游戏,王者荣耀定义本身就是一款PK竞技类游戏,所以用亚瑟看起来更加热血沸你在淘宝上买过哪些好吃的东西?谢邀!1吃过她家的麻辣小龙虾,辣度很合适的,就是小贵了一些。平时用来当零食实在是太满意了,虾尾味道是真的不错肉也多,加热品尝后感觉口味鲜香辣!2优焙谷味面包坊喜欢他家的红丝绒面包,手机硬件超出switch很多,为什么做不出高质量的单机游戏?因为手机(尤其是安卓)如果root,能免费下载所有游戏,另外不root也能找到一些破解游戏。也就是说在手机上做单机游戏很可能赚不到钱,还不如随便出个网游,即使是换皮或者盗版网游一样好吃的辣椒酱怎么做?蒜蓉辣椒酱材料辣椒蒜盐高度酒(注意,必须是高度的)瓶子做法1将辣椒和蒜洗干净,晾干水!(一定要晾干!)菜刀和砧板也洗干净,晾干。2辣椒和蒜的比例可根据个人的喜好。然后将辣椒和蒜分别