尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Kimi LeetCode LCP 15. 游乐园的迷宫 TypeScript实现

Kimi    LeetCode LCP 15. 游乐园的迷宫 TypeScript实现 LCP 15. 游乐园的迷宫 — TypeScript 实现完整代码typescriptfunction visitOrder(points: number[][], direction: string): number[] {const n points.length;const visited: boolean[] new Array(n).fill(false);const ans: number[] [];// 辅助函数计算向量 a-bconst vec (a: number[], b: number[]): number[] {return [b[0] - a[0], b[1] - a[1]];};// 辅助函数计算向量叉积 (a x b)const cross (a: number[], b: number[]): number {return a[0] * b[1] - a[1] * b[0];};// 1. 选择横坐标最小的点作为起点let start 0;for (let i 0; i n; i) {if (points[i][0] points[start][0]) {start i;}}ans.push(start);visited[start] true;// 2. 根据 direction 贪心选择下一个点for (const d of direction) {let nxt -1;if (d L) {// 下一步要左转当前选最右侧的点叉积最大for (let j 0; j n; j) {if (!visited[j]) {if (nxt -1 || cross(vec(points[start], points[j]),vec(points[start], points[nxt])) 0) {nxt j;}}}} else {// 下一步要右转当前选最左侧的点叉积最小for (let j 0; j n; j) {if (!visited[j]) {if (nxt -1 || cross(vec(points[start], points[j]),vec(points[start], points[nxt])) 0) {nxt j;}}}}ans.push(nxt);visited[nxt] true;start nxt;}// 3. 最后一个未访问的点加入答案for (let i 0; i n; i) {if (!visited[i]) {ans.push(i);}}return ans;}核心思路与 Python 版本完全一致利用叉积判断相对位置 贪心选择最极端点方向 策略 叉积条件L (下一步左转) 当前选最右侧的点 cross 0R (下一步右转) 当前选最左侧的点 cross 0- 叉积 0j 在 start→nxt 的左侧 → nxt 更靠右- 叉积 0j 在 start→nxt 的右侧 → nxt 更靠左起点选横坐标最小点确保初始方向可控后续每一步贪心保证剩余点都在要求方向的一侧。复杂度- 时间O(N^2)- 空间O(N)
返回列表