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