将二维数组压缩成一维数组

Posted

技术标签:

【中文标题】将二维数组压缩成一维数组【英文标题】:Compress a 2D array into a 1D Array 【发布时间】:2016-10-12 20:25:29 【问题描述】:

我有一个四边形(二维数组),它由 0 到 255 范围内的数字组成 并且数组的最常见值(在我的情况下为 2)是背景值

我必须将除背景值之外的所有数组值(我必须忽略所有包含 2 的情况)以这种排列方式放入一维数组中

行、列、值、行、下一列、下一值

例如我有

2,3,2,2,
2,2,2,2,

在一维数组中它会像 1,2,3,

我添加了空格以使其更具可读性

这是我的数组

int image1[MAXL][MAXC]=

    2,3,2,2,
    2,2,2,2,
    2,255,2,2,
    255,2,2,2,
    2,255,2,2
;

和循环

 for (int i = 0; i<nbc;i++)

    for (int j=0; j<nbl;j++)
    
        if (image1[j][i]==BackColor)
        

        
        else 
    

nbc 和 nbl 分别是列数和行数

感谢您的帮助

编辑:我完全失败了我的例子我没有忽略 2,现在应该没问题

【问题讨论】:

到目前为止你尝试过什么? 在你的例子中这是一个奇怪的 压缩 BTW,因为你没有跳过背景。 我没有尝试太多,我只有一个通过二维数组的循环 @EdoYouss - 然后显示循环和二维数组 @EdoYouss - 如果您是 C++ 新手,那么请忘掉所有关于 C 样式数组的知识,开始学习容器。它们的发明是为了让生活变得简单。 【参考方案1】:

使用std::vector的简单方法

std::vector<int> result;
for (int i = 0; i<MAXL;i++)

    for (int j=0; j<MAXC;j++)
    
        if (image1[i][j] != BackColor)  // Notice !=
        
            result.push_back(i+1);
            result.push_back(j+1);
            result.push_back(image1[i][j]);
        
    



for (auto x : result)

    std::cout << x << " ";

std::cout << endl;

输出:

1 2 3 3 2 255 4 1 255 5 2 255

http://ideone.com/yJawu5

【讨论】:

以上是关于将二维数组压缩成一维数组的主要内容,如果未能解决你的问题,请参考以下文章

LC2022. 将一维数组转变成二维数组

《LeetCode之每日一题》:253.将一维数组转变成二维数组

Leetcode刷题100天—2022. 将一维数组转变成二维数组(数组)—day55

Leetcode刷题100天—2022. 将一维数组转变成二维数组(数组)—day55

PHP 将二维数组转成一维数组

将一维数组转化成二维数组