2022-01-08:数组中只有0和1,每过1代,0旁边只有1个1,当前0会变成1。每过1代,0旁边有2个1,当前0还是0。
比如10001,经过1代,会变成11011,再过1代,还是11011 。
求一个数组经过M代以后的数组。函数定义是void f(int[] arr,int m) 。

答案2022-01-08:

x里有有限个0。
1x1,中间0,x中有2m个0变成1,最中间的0不会变成1。
1x,右0,x中有m个0变成1。
x1,左0,x中有m个0变成1。
时间复杂度:O(N)。
空间复杂度:O(1)。

代码用golang编写。代码如下:

package mainimport "fmt"func main() {arr := []byte{0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0}f(arr, 2)fmt.Println(arr)
}func f(arr []byte, m int) {//找中间0oneIndexList := make([]int, 0)for i, a := range arr {if len(oneIndexList) == 2 {oneIndexList = oneIndexList[1:]}if a == 1 {oneIndexList = append(oneIndexList, i)}if len(oneIndexList) == 2 {for j := oneIndexList[0] + 1; j <= oneIndexList[1]-1; j++ {if j-oneIndexList[0] != oneIndexList[1]-j &&(j-oneIndexList[0] <= m ||oneIndexList[1]-j <= m) {arr[j] = 1}}}}//找左0oneLeftIndex := 0for i, a := range arr {if a == 1 {oneLeftIndex = ibreak}}if oneLeftIndex > 0 {left := oneLeftIndex - mright := oneLeftIndex - 1if left < 0 {left = 0}for i := left; i <= right; i++ {arr[i] = 1}}//找右0oneRightIndex := len(arr) - 1for i := oneRightIndex; i >= 0; i-- {a := arr[i]if a == 1 {oneRightIndex = ibreak}}if oneRightIndex < len(arr)-1 {left := oneRightIndex + 1right := oneRightIndex + mif right > len(arr)-1 {right = len(arr) - 1}for i := left; i <= right; i++ {arr[i] = 1}}
}

执行结果如下:


题目来自左神,代码是自己写的。

2022-01-08:数组中只有0和1,每过1代,0旁边只有1个1,当前0会变成1。每过1代,0旁边有2个1,当前0还是0。 比如10001,经过1代,会变成11011,再过1代,还是11011 。相关推荐

  1. js数组中的splice()方法

    splice方法用于删除.替换.添加数组中的元素,由于参数较多,使用起来容易混淆 var list = []; list.push(1); list.push(2); list.push(3); co ...

  2. LeetCode题组:第26题-删除排序数组中的重复项

    1.题目:删除排序数组中的重复项 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度.(注意这里提到了排序数组,也就是说数组是有序的.如果无序,我们又 ...

  3. 《剑指offer》第四题(二维数组中的查找)

    // 二维数组中的查找 // 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按 // 照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个 // 整数,判断数组 ...

  4. C语言学习之有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中

    有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中 #include <stdio.h> void main(){int a[11]={25,32,65,74,84,9 ...

  5. 未能比较数组中的两个元素_算法3 寻找两个正序数组的中序数

    问题描述: 给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2.请你找出并返回这两个正序数组的中位数.要求设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题. ...

  6. javascript中索引_如何在JavaScript中找到数字在数组中所属的索引

    javascript中索引 Sorting is a very important concept when writing algorithms. There are all kinds of so ...

  7. 力扣——在排序数组中查找元素的第一个和最后一个位置

    在排序数组中查找元素的第一个和最后一个位置 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 如果数组中不存在目标值 target,返 ...

  8. Java 数组 定义一个数组,获取数组中的最大值和最小值,奇数个数和偶数个数...

    /*** 定义一个数组,获取数组中的最大值和最小值 奇数个数和偶数个数* */ package com.xuyigang1234.chp01;public class Demo8 {public st ...

  9. 找出数组中其中最大的数及其下标

    1.在一个有8个整数(18,25,7,36,13,2,89,63)的数组中找出其中最大的数及其下标. 代码如下: public static void main(String[] args) {int ...

  10. leetcode|剑指offter|面试题3:数组中重复的数字

    面试题03. 数组中重复的数字 本题要求找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每 ...

最新文章

  1. 微信小程序制作-随笔2
  2. 计算机考试字字处理重点,计算机等级考试一级B上机试题:字表处理题(1)
  3. mysql innodb 从 ibd 文件恢复表数据
  4. vue中Axios的封装与API接口的管理详解
  5. 使用 Flutter 制作一个简单的笑话生成器应用程序
  6. 操作系统原理:页置换算法,FIFO,LRU,Clock,LFU,二次机会法
  7. 基于事件驱动架构构建微服务第9部分:处理更新
  8. 您会后悔对Lambdas应用重载!
  9. 设计模式 - 依赖倒置原则
  10. linux内核分析及应用 -- 中断机制
  11. mysql新建数据库数据类型_数据库Mysql的学习(二)-数据类型和创建
  12. elementui二维表动态渲染
  13. 计算机微课课件评比活动总结,教学大赛总结.doc
  14. DC Motor 参数的理解
  15. oracle中hint 详解
  16. SEO优化:自建站图片优化攻略
  17. 故乡,生活十多年的地方
  18. Thingsboard Build踩坑(一)
  19. Excel 2010 如何将筛选后的数据复制粘贴到另一个工作表筛选后的表格里
  20. 图像去除栅格,条纹伪影的办法(附python代码)

热门文章

  1. c++数组、结构体数组和对象数组的初始化方式
  2. Android-深色模式篇
  3. 彻底删除双系统的解决办法(UEFI启动)
  4. c语言逻辑运算符用法大全,【学习笔记】【C语言】逻辑运算符
  5. 战争机器5加速器信息:开发工作已经完成 更多内容将在科隆展上披露
  6. Texas Instruments Website
  7. 应用计算机测线性电阻伏安特性曲线,线性电阻的伏安特性曲线总结分析.docx
  8. 计算机Auto服务错误1053,Win7电脑宽带连接错误1053的原因和解决方案
  9. OMNeT++理论算法仿真详述
  10. 大话伊辛模型之一:源起