完整题目描述
等差切片
给定一个整数数组 arr
和一个整数 k
,你需要找到所有在数组中长度至少为 k
的子数组(切片),这些子数组满足任意两个相邻元素之间的差等于给定的整数 d
。
要求:
- 返回所有满足条件的子数组(切片)的起始索引和结束索引(包含两端)。
- 如果有多个这样的子数组,则按照它们在原数组中出现的顺序返回。
- 如果没有找到任何满足条件的子数组,则返回一个空数组。
示例
输入:
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 示例代码
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 示例代码
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 示例代码
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));
码小课网站中有更多相关内容分享给大家学习,包括但不限于算法、数据结构、编程技巧等,帮助大家提升编程能力。