当前位置: 面试刷题>> 等差切片 (经典算法题500道)
### 完整题目描述
**等差切片**
给定一个整数数组 `arr` 和一个整数 `k`,你需要找到所有在数组中长度至少为 `k` 的子数组(切片),这些子数组满足任意两个相邻元素之间的差等于给定的整数 `d`。
要求:
1. 返回所有满足条件的子数组(切片)的起始索引和结束索引(包含两端)。
2. 如果有多个这样的子数组,则按照它们在原数组中出现的顺序返回。
3. 如果没有找到任何满足条件的子数组,则返回一个空数组。
### 示例
**输入**:
- `arr = [1, 2, 3, 4, 5, 6]`
- `k = 3`
- `d = 1`
**输出**:
- `[[0, 2], [1, 3], [2, 4], [3, 5]]`
**解释**:
- `[1, 2, 3]` 是一个满足条件的子数组,起始索引为 0,结束索引为 2。
- `[2, 3, 4]` 也是一个满足条件的子数组,起始索引为 1,结束索引为 3。
- 以此类推,`[3, 4, 5]` 和 `[4, 5, 6]` 同样满足条件。
### PHP 示例代码
```php
function findArithmeticSlices($arr, $k, $d) {
$n = count($arr);
$result = [];
for ($i = 0; $i <= $n - $k; $i++) {
$isValid = true;
for ($j = 1; $j < $k; $j++) {
if ($arr[$i + $j] - $arr[$i + $j - 1] != $d) {
$isValid = false;
break;
}
}
if ($isValid) {
$result[] = [$i, $i + $k - 1];
}
}
return $result;
}
// 示例用法
$arr = [1, 2, 3, 4, 5, 6];
$k = 3;
$d = 1;
print_r(findArithmeticSlices($arr, $k, $d));
```
### Python 示例代码
```python
def findArithmeticSlices(arr, k, d):
result = []
n = len(arr)
for i in range(n - k + 1):
if all(arr[i + j] - arr[i + j - 1] == d for j in range(1, k)):
result.append([i, i + k - 1])
return result
# 示例用法
arr = [1, 2, 3, 4, 5, 6]
k = 3
d = 1
print(findArithmeticSlices(arr, k, d))
```
### JavaScript 示例代码
```javascript
function findArithmeticSlices(arr, k, d) {
const result = [];
const n = arr.length;
for (let i = 0; i <= n - k; i++) {
let isValid = true;
for (let j = 1; j < k; j++) {
if (arr[i + j] - arr[i + j - 1] !== d) {
isValid = false;
break;
}
}
if (isValid) {
result.push([i, i + k - 1]);
}
}
return result;
}
// 示例用法
const arr = [1, 2, 3, 4, 5, 6];
const k = 3;
const d = 1;
console.log(findArithmeticSlices(arr, k, d));
```
**码小课**网站中有更多相关内容分享给大家学习,包括但不限于算法、数据结构、编程技巧等,帮助大家提升编程能力。