题目描述补充
题目:数组压缩
给定一个整数数组 arr
,要求实现一个函数来“压缩”这个数组。压缩的规则是:连续重复的元素只保留一个,并在其后面加上一个计数表示该元素重复的次数。如果数组中不包含重复元素,则直接返回原数组。
例如:
- 输入:
[1, 2, 2, 3, 4, 4, 4]
- 输出:
[1, 2, 2, 3, 4, 3]
解释:2
出现了两次,所以保留两个2
后面跟一个2
;4
出现了三次,所以保留一个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);
码小课网站中有更多相关内容分享给大家学习,这些示例展示了基本的数组处理技巧,在解决算法问题时非常有用。