当前位置: 面试刷题>> 数组压缩 (经典算法题500道)


题目描述补充

题目:数组压缩

给定一个整数数组 arr,要求实现一个函数来“压缩”这个数组。压缩的规则是:连续重复的元素只保留一个,并在其后面加上一个计数表示该元素重复的次数。如果数组中不包含重复元素,则直接返回原数组。

例如:

  • 输入:[1, 2, 2, 3, 4, 4, 4]
  • 输出:[1, 2, 2, 3, 4, 3] 解释:2 出现了两次,所以保留两个 2 后面跟一个 24 出现了三次,所以保留一个 4 后面跟一个 3

注意:输出中的计数表示重复的次数,而不是重复的元素本身。

PHP 示例代码

function compressArray($arr) {
    $result = [];
    $count = 1;

    for ($i = 0; $i < count($arr); $i++) {
        if ($i + 1 < count($arr) && $arr[$i] == $arr[$i + 1]) {
            $count++;
        } else {
            $result[] = $arr[$i];
            if ($count > 1) {
                $result[] = $count;
            }
            $count = 1;
        }
    }

    return $result;
}

// 测试
$arr = [1, 2, 2, 3, 4, 4, 4];
$compressed = compressArray($arr);
print_r($compressed);

Python 示例代码

def compress_array(arr):
    result = []
    count = 1

    for i in range(len(arr)):
        if i + 1 < len(arr) and arr[i] == arr[i + 1]:
            count += 1
        else:
            result.append(arr[i])
            if count > 1:
                result.append(count)
            count = 1

    return result

# 测试
arr = [1, 2, 2, 3, 4, 4, 4]
compressed = compress_array(arr)
print(compressed)

JavaScript 示例代码

function compressArray(arr) {
    let result = [];
    let count = 1;

    for (let i = 0; i < arr.length; i++) {
        if (i + 1 < arr.length && arr[i] === arr[i + 1]) {
            count++;
        } else {
            result.push(arr[i]);
            if (count > 1) {
                result.push(count);
            }
            count = 1;
        }
    }

    return result;
}

// 测试
let arr = [1, 2, 2, 3, 4, 4, 4];
let compressed = compressArray(arr);
console.log(compressed);

码小课网站中有更多相关内容分享给大家学习,这些示例展示了基本的数组处理技巧,在解决算法问题时非常有用。

推荐面试题