文章目录

  • 1. 题目
  • 2. 解题
    • 2.1 模拟超时
    • 2.2 优化通过

1. 题目

某乐团的演出场地可视作 num * num 的二维矩阵 grid(左上角坐标为 [0,0]),每个位置站有一位成员。
乐团共有 9 种乐器,乐器编号为 1~9,每位成员持有 1 个乐器。

为保证声乐混合效果,成员站位规则为:自 grid 左上角开始顺时针螺旋形向内循环以 1,2,…,9 循环重复排列。
例如当 num = 5 时,站位如图所示

请返回位于场地坐标 [Xpos,Ypos] 的成员所持乐器编号

示例 1:
输入:num = 3, Xpos = 0, Ypos = 2
输出:3

解释:

示例 2:
输入:num = 4, Xpos = 1, Ypos = 2
输出:5

解释:

提示:
1 <= num <= 10^9
0 <= Xpos, Ypos < num

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/SNJvJP
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题


从 (0, -1) 出发,发现 每个边走到尽头的步数规律 n, n-1, n-1, n-2, n-2 …

2.1 模拟超时

class Solution {public:int orchestraLayout(int num, int xPos, int yPos) {long long tot = 1LL*num*num, ct = 0;long long x0 = 0, y0 = 0, x1 = 0 , y1 = -1, delta = num, i = 0;long long d, idx;while(ct < tot){if(i%2 == 1)delta--;//奇数的时候,步长减少 1ct += delta; // 总的格数if(i%4==0) // 四个方向挪动的坐标{y1 += delta;}else if(i%4 == 1){x1 += delta;}else if(i%4 == 2){y1 -= delta;}else{x1 -= delta;}if(x0 == xPos && x1 == xPos && ((yPos >= y0 && yPos <= y1) || (yPos >= y1 && yPos <= y0))){   // 如果在前后端点之间,则找到位置d = abs(y1-yPos); // 计算偏差idx = ct-d; // 减去偏差格数break;}else if(y0 == yPos && y1 == yPos && ((xPos >= x0 && xPos <= x1) || (xPos >= x1 && xPos <= x0))){d = abs(x1-xPos);idx = ct-d;break;}x0 = x1;y0 = y1;i++;}return (idx%9==0) ? 9 : (idx%9);  // 返回序号}
};

2.2 优化通过

  • 先找出这个坐标处在第几层
  • 等差数列求和,所有外层的格子数目
  • 再利用上面的代码,遍历所在的一圈就可以找出答案
class Solution {public:int orchestraLayout(int num, int x, int y) {int a = num-x, b = num-y;int layer = min(x+1,min(a, min(y+1, b)));//所在的圈layer--;// 外面有多少个完整的圈long long  ct = 4LL*layer*(num-layer), idx;// 每圈的边长 为 n, 则 格子数 为 4(n-1)// 第 layer 圈 的边长 n-2(layer-1)// 外部完全圈的格子总数:layer*4(n-1+n-2(layer-1)-1)/2// = 2*layer*(2n-1-2layer+2-1) = 4*layer(n-layer)int delta = num - 2*layer, i = 0;// (x,y)点 所在圈的 边长 delta int x0 = layer,y0 = layer-1, x1 = layer, y1 = layer-1, d;// 起点坐标 x1, y1while(i < 4) { // 遍历 目标点所在的圈if(i%2 == 1)delta--;ct += delta;if(i%4==0){y1 += delta;}else if(i%4 == 1){x1 += delta;}else if(i%4 == 2){y1 -= delta;}else{x1 -= delta;}if(x0 == x && x1 == x && ((y >= y0 && y <= y1) || (y >= y1 && y <= y0))){d = abs(y1-y);idx = ct-d;break;}else if(y0 == y && y1 == y && ((x >= x0 && x <= x1) || (x >= x1 && x <= x0))){d = abs(x1-x);idx = ct-d;break;}x0 = x1;y0 = y1;i++;}return (idx%9==0) ? 9 : (idx%9);}
};

0 ms 5.7 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode LCP 29. 乐团站位(数学 等差数列)相关推荐

  1. LeetCode——LCP 29. 乐团站位[简单]——分析及代码(Java)

    LeetCode--LCP 29. 乐团站位[简单]--分析及代码[Java] 一.题目 二.分析及代码 1. 直接计算 (1)思路 (2)代码 (3)结果 三.其他 一.题目 某乐团的演出场地可视作 ...

  2. LeetCode LCP 29. 乐团站位

    力扣 解题思路:    参考 Deeemo 1.第一步定位给定的坐标所在的层数:round = min(xPos, num - 1 - xPos, yPos, nums - 1 - yPos) 2.根 ...

  3. 【leetcode-Python】-找数学规律-LCP 29. 乐团站位

    题目链接 https://leetcode-cn.com/problems/SNJvJP/ 题目描述 某乐团的演出场地可视作 num * num 的二维矩阵 grid(左上角坐标为 [0,0]),每个 ...

  4. LCP 29. 乐团站位(leetcode)

    完成时间:2021年6月22日 ps:你敢相信,这道题是简单题?我废了 写这篇完全是纪念今天的辣子鸡和今天我用费的时光 题目:https://leetcode-cn.com/problems/SNJv ...

  5. LCP 29. 乐团站位

    题目链接:https://leetcode-cn.com/problems/SNJvJP/ 思路:先算出(xPos,yPos)在第几层,然后再算出他在当前层的位置(上下左右),通过层数(不加上他在的那 ...

  6. leetcode 29.乐团站位(蛇形矩阵)

    某乐团的演出场地可视作 num * num 的二维矩阵 grid(左上角坐标为 [0,0]),每个位置站有一位成员.乐团共有 9 种乐器,乐器编号为 1~9,每位成员持有 1 个乐器. 为保证声乐混合 ...

  7. [E找规律] lcLCP29. 乐团站位(找规律+数学)

    文章目录 1. 题目来源 2. 题目解析 1. 题目来源 链接:LCP 29. 乐团站位 相关:[Mbfs] lc54. 螺旋矩阵(bfs+方向数组) 2. 题目解析 经典问题,一看有手就行,结果不知 ...

  8. 算法:乐团站位 【模拟 vs 大数】

    本题来自力扣杯竞赛真题-2021春赛第一题: LCP 29.乐团站位,难度为简单,考察模拟和大数 题目 某乐团的演出场地可视作 num * num 的二维矩阵 grid(左上角坐标为 [0,0]),每 ...

  9. ⭐算法入门⭐《二分枚举》简单15 —— LeetCode LCP 18. 早餐组合

    文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述   小扣在秋日市集选择了一 ...

最新文章

  1. Codeforces Round #466 (Div. 2)
  2. vim - ctags
  3. python从入门到实践笔记_Python编程从入门到实践二至七章笔记
  4. ESP8266/ESP32 NVS 基本操作
  5. 并归排序(看别人的看不懂,自己写了一个),排序思想是一样的
  6. 数据库事务原理详解-数据库隔离级别
  7. Windows Azure 部署 Windows 8 虚拟机
  8. python在cmd界面输入命令_python如何分别向两个cmd窗口输入指令?
  9. OpenSLR 中国镜像背后的数据存储服务商,原来是这样一家公司!
  10. 分享2款XSHELL配色方案及导入配色方案的方法
  11. 数据结构笔记(三十二)--二叉排序树的基本概念与查找
  12. faststone capture 屏幕录像没有声音
  13. GSCC呼叫中心系统
  14. docker 僵尸进程
  15. 未明学院:大学四年应当如何度过,才算不辜负?
  16. 一起弄个微信订阅号鉴黄机器人
  17. python函数可以分为哪几类_python函数有哪几种
  18. pthread_t总结
  19. 7.Python 文件I/O
  20. 计算机系统中io设置的作用是,(山东省计算机文化基础选择题.doc

热门文章

  1. 深度学习之 DCN(Deformable Convolution)-可变形卷积
  2. 河南王牌计算机专业,河南计算机专业实力突出的7所大学,郑大位列次席,榜首实至名归...
  3. python静态方法,类方法,属性方法,实例方法
  4. bic,orr——设置某些位为0或者1
  5. 根据对象的属性去重,获取新数组
  6. 解决文件路径的问题的总结
  7. Golang切片的三种简单使用方式及区别
  8. 欧拉回路 欧拉路径
  9. 用OC和Swift一起说说二叉树
  10. Linux中source是什么指令?