0

0

如何将二维数组中的所有非零元素向左紧凑排列

碧海醫心

碧海醫心

发布时间:2026-02-02 10:06:01

|

935人浏览过

|

来源于php中文网

原创

如何将二维数组中的所有非零元素向左紧凑排列

本文介绍一种高效、原地操作的算法,用于将 4×4 二维数组中每行的非零元素全部左移并紧凑排列,零元素自动右移填充,适用于 2048 等滑动类游戏逻辑实现。

在实现类似 2048 的滑动逻辑时,swipeLeft() 的核心目标并非简单循环移位(如 (c+1) % 4),而是对每一行执行「非零元素左聚」操作:保持原有相对顺序,将所有非零值尽可能靠左排列,右侧用 0 填充。关键在于原地重排——不依赖额外数组,避免索引越界,同时确保移动后原位置被正确置零。

以下是一个清晰、健壮的实现方案:

public void swipeLeft() {
    for (int[] row : gameBoard) {
        int nextIndex = 0; // 指向当前行中首个待填充的空位(初始为最左)

        // 步骤1:定位第一个零的位置(即首个可插入位置)
        while (nextIndex < row.length && row[nextIndex] != 0) {
            nextIndex++;
        }

        // 步骤2:从该位置向右扫描,遇到非零元素即搬移至 nextIndex,并将原位清零
        for (int col = nextIndex; col < row.length; col++) {
            if (row[col] != 0) {
                row[nextIndex] = row[col];
                row[col] = 0;
                nextIndex++; // 指针前移,准备接收下一个非零值
            }
        }
    }
}

该算法时间复杂度为 O(N×M)(对 4×4 数组即 O(16)),空间复杂度为 O(1),完全原地完成。其逻辑分为两阶段:

Stenography
Stenography

一个AI驱动的代码库API

下载
  • 定位阶段:找到每行最左侧的 0(即首个可写入位置);
  • 填充阶段:从此处开始向右遍历,每发现一个非零数,就将其“搬运”至此位置,并立即将原位置设为 0,同时推进写入指针。

⚠️ 注意事项:

  • 切勿使用 gameBoard[r][c] = gameBoard[r][(c+1) % 4] 类似逻辑——这属于错位赋值,会覆盖未读取数据,导致信息丢失和越界风险;
  • 必须严格区分「读取位置」(col)与「写入位置」(nextIndex),二者独立演进;
  • 若需支持合并(如 2048 中相邻相同数相加),应在搬运前增加合并判断逻辑,本例仅处理基础位移。

此方法简洁、可读性强,且已通过您提供的测试用例验证(输入 → 输出完全匹配),是实现游戏左滑动行为的推荐实践。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

422

2023.08.14

go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

61

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

52

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

25

2026.01.31

golang 循环遍历
golang 循环遍历

本专题整合了golang循环遍历相关教程,阅读专题下面的文章了解更多详细内容。

10

2026.01.31

Golang人工智能合集
Golang人工智能合集

本专题整合了Golang人工智能相关内容,阅读专题下面的文章了解更多详细内容。

7

2026.01.31

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

415

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

232

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

198

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 14.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.1万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号