将 0 移至数组末尾

2023-11-27

我需要将数组中的所有 0 移动到数组的末尾。

示例:[1, 10, 0, 5, 7] 应该得到 [1, 10, 5, 7, 0]。

我愿意做反向循环或常规循环。

I cannot创建一个新数组。

这是我到目前为止所拥有的:

for (int i = arr.length; i <= 0; --i) {
    if (arr[i] != 0) {
        arr[i] = arr.length - 1;
    }
}

Thanks!


SIZE(n) 其中 n = arr.size,保留顺序:

创建一个与需要从中删除 0 的初始数组大小相同的数组。迭代原始数组,并将每个不为 0 的元素添加到新数组中。当遇到 0 时,计算它。现在,当到达第一个数组的末尾时,只需将计算出的 0 数量添加到数组的末尾即可。而且,更简单的是,由于 Java 将数组初始化为 0,因此您可以忘记在末尾添加零。


Edit

由于您添加了无法创建新数组的额外约束,因此我们需要采取与我上面建议的方法略有不同的方法。

SIZE(1)

我假设数组需要保持与 0 移动到末尾之前相同的顺序。如果不是这种情况,则有另一个简单的解决方案,如 Brads 答案中详述:将“最后一个零”索引初始化为数组的最后一个元素,然后向后迭代,将任何零与每次递减的最后一个零的索引交换您执行交换或看到零。

SIZE(1),保留顺序:

要将 0 移动到末尾而不复制数组并使元素保持正确的顺序,您可以完全按照我的建议进行操作,而无需复制数组,但在同一数组上保留两个索引。

从数组的两个索引开始。如果元素不为零,则不要将其复制到新数组,而是将其保留在原来的位置并增加两个索引。当达到零时,仅增加一个索引。现在,如果两个索引不相同,并且您查看的不是 0,则将当前元素交换到落后的索引位置(由于遇到 0)。在这两种情况下,如果当前元素不为 0,则增加另一个索引。

它看起来像这样:

int max = arr.length;
for (int i = 0, int j = 0; j < max; j++) {
  if (arr[j] != 0) {
    if (i < j) {
      swap(arr, i, j);
    }
    i++
  }
}

运行此:

{ 1, 2, 0, 0, 0, 3, 4, 0, 5, 0 }

yeilds:

{ 1, 2, 3, 4, 5, 0, 0, 0, 0, 0 }

我制造了一个完全工作版本对于任何好奇的人。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 0 移至数组末尾 的相关文章

随机推荐

  • 为什么在 MNIST 分类器代码中使用 X[0] 会出现错误?

    我正在学习使用 MNIST 数据集进行分类 我遇到了一个错误 我无法弄清楚 我已经做了很多谷歌搜索 但我无能为力 也许你是专家并且可以帮助我 这是代码 gt gt gt from sklearn datasets import fetch
  • 如何去除 IE9 中链接周围的蓝色边框?

    我正在这个网站上工作 http amberdreams com 这是一个非常简单的网站 我一直在使用 netrenderer com 来确保所有页面都可以在 Internet Explorer 中运行 尽管我尽了最大努力 但在使用 Inte
  • Dijkstra 算法的复杂性

    我从许多来源了解到 如果使用简单的方法来获取最小元素 线性搜索 Dijkstra 的最短路径也将以 O V 2 复杂度运行 但是 如果使用优先级队列 则可以优化为 O VLogV 因为该数据结构将在 O 1 时间内返回 min 元素 但在删
  • 如何使用 Dropbox 在多个平台之间保持 Eclipse 安装同步?

    在每台机器上设置 Eclipse 真是一件令人头疼的事情 我希望保持多台机器之间的 Eclipse 文件和配置同步 我想让 Eclipse 在 OS X Linux 和 Windows 上保持同步 因此我开始获取 OS X 版本的 ecli
  • 单身人士的好例子?

    我有一个应用程序 其中有几个用于存储应用程序范围设置 资源位置 用户设置等 的类 现在这些类充满了静态字段和方法 但我从未实例化它们 有人建议我让他们成为单身人士 赞成 反对的理由是什么 我认为 Singleton 模式是应用最不恰当的设计
  • WGS84 到 Google 地图位置和返回的 Java 代码

    搜索一些示例代码 用于将 WGS84 坐标系中的点转换为 Google 地图中的地图位置 像素位置 还支持缩放级别 如果代码有很好的注释 那么它也可以采用其他语言 您还可以向我指出一个开源 Java 项目 找到的一些资源 开放层执行 JOS
  • Terracotta 是分布式缓存吗?

    Is 红陶分布式缓存 尽管您没有具体说明您正在谈论哪种产品 但我假设您指的是开源平台本身 简短的答案是否定的 但它可以用来编写分布式缓存 并且它已经出现在他们自己的产品之一 Ehcache 中 您可以看到核心引擎的概述here 看来他们现在
  • 如何在数据库模式中支持多语言方法?

    我希望我的数据库支持其表中所有文本值的多种语言 那么最好的方法是什么 Edit1 E G 我有这个 人 表 ID int FirstName nvarchar 20 LastName nvarchar 20 Notes nvarchar m
  • Spring Batch 动态块大小的自定义完成策略

    Context 我们有一项批处理作业 可以将本地化的国家 地区名称 即将国家 地区名称翻译为不同语言 从外部复制到我们的数据库 这个想法是在一个块中处理单个国家 地区的所有本地化国家 地区名称 即第一个块 安道尔的所有翻译 下一个块 阿联酋
  • Typescript 仅从重载中选择特定方法(传递给Parameters

    背景 所以我在从重载的函数获取特定参数时遇到问题 例如 someLib d ts type Component
  • 查找字符串中的多个子字符串而不对其进行多次迭代

    我需要查找列表中的项目是否出现在字符串中 然后将这些项目添加到不同的列表中 这段代码的工作原理 data line akhgvfalfhda dhgfa lidhfalihflaih Thing1 aoufgyafkugafkjhafkjh
  • 使用junit 4创建POM

    我使用 Maven 3 0 4 并希望默认使用 junit 4 我的项目是使用以下命令创建的 gt mvn 原型 创建 DgroupId my group id DartifactId myArtifactId DpackageName m
  • Python 将 html 转换为文本并模仿格式

    我正在学习 BeautifulSoup 并发现了许多 html2text 解决方案 但我正在寻找的解决方案应该模仿格式 ul li One li li Two li ul 会成为 One Two and Some text blockquo
  • 使用流下载大文件时的 Axios 事件

    我正在使用 axios服务器端 我要下载big文件 从技术上讲 这应该与字节范围一起使用 axios 是否处理字节范围请求 以便仅在所有响应准备就绪时调用回调函数 If 1 is not true 我应该处理吗数据块我自己 在下面的代码中
  • 使用 imap 访问电子邮件

    我在 Ubuntu 14 02 上使用 Apache 并在其上运行 php 我已连接到远程 mssql 服务器 因此不需要 mysql 我想知道如何连接到 gmail 注册的电子邮件 ID 以便阅读传入的电子邮件 我已尝试以下操作 但从本地
  • 如何使用正则表达式模式找到后面没有换行符的回车符?

    我需要找到一个回车符 r 它后面没有换行符 n 我该如何使用正则表达式模式来做到这一点 那么以下带有负向前瞻的正则表达式怎么样 r n
  • 实体名称必须紧跟在 jasper 报告中的实体引用错误中的“&”之后

    我有一个包含 4 个子报告的主报告 当我在iReport 版本4 1 3 中生成报告时 报告生成成功 但是 当报告部署在 JBoss 服务器中时 会出现以下错误 Error Parsing Styled Text org xml sax S
  • 如何获得“不平衡”的 ggplots 网格?

    With grid arrange我可以安排多个ggplot通过使用类似以下内容的网格中的图形来实现多面板图形 library ggplot2 library grid library gridExtra 生成一些 ggplot2 图 然后
  • 什么是 uml 构造型以及如何使用它

    我正在为JAVA 软件设计绘制一个类UML 我实在不明白什么是刻板印象 正式定义 构造型是一个概要文件类 它定义如何将现有元类扩展为概要文件的一部分 它允许使用特定于平台或领域的术语或符号来代替或补充用于扩展元类的术语或符号 这是否意味着构
  • 将 0 移至数组末尾

    我需要将数组中的所有 0 移动到数组的末尾 示例 1 10 0 5 7 应该得到 1 10 5 7 0 我愿意做反向循环或常规循环 I cannot创建一个新数组 这是我到目前为止所拥有的 for int i arr length i lt