当前位置: 面试刷题>> 等差切片 (经典算法题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)); ``` **码小课**网站中有更多相关内容分享给大家学习,包括但不限于算法、数据结构、编程技巧等,帮助大家提升编程能力。
推荐面试题