微商城网站建设市场我想帮别人做网站有这样的平台吗
2026/4/18 3:10:45 网站建设 项目流程
微商城网站建设市场,我想帮别人做网站有这样的平台吗,网站搭建响应式,网络营销主要特点有哪些文章目录摘要描述什么是凸多边形#xff0c;用人话说就是#xff1a;题解答案题解代码分析题解代码分析为什么用叉积#xff1f;为什么只关心“符号”#xff0c;不关心大小#xff1f;为什么要跳过 cross 0#xff1f;% n 是干嘛的#xff1f;示例测试及结果示例 1用人话说就是题解答案题解代码分析题解代码分析为什么用叉积为什么只关心“符号”不关心大小为什么要跳过 cross 0% n 是干嘛的示例测试及结果示例 1凸多边形示例 2凹多边形时间复杂度空间复杂度总结摘要《凸多边形》是一道看起来很数学其实很工程的题。它不考复杂公式也不要求你会高等几何真正的核心只有一个所有拐弯方向是不是一致的如果你写过地图路径、UI 绘制、图形编辑器、甚至简单的碰撞检测这道题的思想你大概率已经用过只是没意识到它叫“凸多边形判断”。描述题目给你一组点points表示一个多边形的顶点顶点是按顺序给出的顺时针或逆时针都可以。你的任务是判断这个多边形是不是凸多边形什么是凸多边形用人话说就是任意一条边往内看不会凹进去从任意一个顶点转弯转向方向始终一致不会出现“左转一下右转一下”的情况注意几个隐藏前提点的数量 ≥ 3不需要考虑自交题目默认是合法多边形不要求严格凸共线允许题解答案这道题的经典解法来自一个非常实用的几何思想用叉积判断转向方向具体思路是对每三个连续的点(A, B, C)计算向量AB和BC的叉积记录叉积的符号正 or 负只要中途出现方向不一致立刻返回false如果所有拐弯方向都一致那它一定是凸多边形。题解代码分析下面是完整的 Swift 实现可以直接在 LeetCode 或 Playground 里运行。classSolution{funcisConvex(_points:[[Int]])-Bool{letnpoints.countifn3{returnfalse}varprevCross0foriin0..n{letp0points[i]letp1points[(i1)%n]letp2points[(i2)%n]letcrosscrossProduct(p0,p1,p2)ifcross!0{ifprevCross!0cross*prevCross0{returnfalse}prevCrosscross}}returntrue}privatefunccrossProduct(_a:[Int],_b:[Int],_c:[Int])-Int{letx1b[0]-a[0]lety1b[1]-a[1]letx2c[0]-b[0]lety2c[1]-b[1]returnx1*y2-y1*x2}}题解代码分析为什么用叉积叉积在二维空间里有一个非常好用的特性结果 0 逆时针转左转结果 0 顺时针转右转结果 0 三点共线也就是说它本质是在回答一个问题从 A → B → C是往哪边拐为什么只关心“符号”不关心大小因为这道题只在乎方向是否一致全是左转 → 凸全是右转 → 凸左右混着来 → 凹至于拐得多猛完全不重要。为什么要跳过cross 0ifcross!0{...}这是为了允许共线点的存在。现实中非常常见比如UI 边框上多给了几个点地图边界是直线拆成多段只要方向不反转就依然是凸的。% n是干嘛的points[(i1)%n]这是为了让最后一个点能和第一个、第二个点组成一组形成一个“闭环”。多边形一定是闭合的这一步非常关键。示例测试及结果示例 1凸多边形letsolutionSolution()print(solution.isConvex([[0,0],[0,1],[1,1],[1,0]]))这是一个标准正方形每一次转向方向一致输出true示例 2凹多边形print(solution.isConvex([[0,0],[0,10],[10,10],[5,5],[10,0]]))中间有一个点明显往里凹转向方向发生变化输出false时间复杂度只遍历了一次数组每次做常数计算O(n)空间复杂度只使用了少量变量没有额外数据结构O(1)总结《凸多边形》是一道非常值得记住思路的几何题。它教会你的不是几何公式而是如何把“形状判断”转化成“方向一致性判断”如何用一个简单的数学工具叉积解决工程问题如何写出既严谨又能容忍真实数据噪声的代码

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询