定制网站建设与运营案例网站排版怎么做的
2026/2/21 22:30:03 网站建设 项目流程
定制网站建设与运营案例,网站排版怎么做的,网页设计html教程,wordpress自动提交百度题目链接#xff1a;2975. 移除栅栏得到的正方形田地的最大面积#xff08;中等#xff09; 算法原理#xff1a; 解法#xff1a;暴力枚举 622ms击败78.57% 时间复杂度O(N) 此题跟上一题 A.每日一题——2943. 最大化网格图中正方形空洞的面积 的不同点#x1f447; 空洞…题目链接2975. 移除栅栏得到的正方形田地的最大面积中等算法原理解法暴力枚举622ms击败78.57%时间复杂度O(N²)此题跟上一题 A.每日一题——2943. 最大化网格图中正方形空洞的面积 的不同点空洞面积题给的可移除线条数组外的内部线条依然存在且固定田地面积题此题除了给的可移除栅栏数组外没有其他内部栅栏只剩下四周不可变的栅栏了也就是说空洞面积题不存在无解情况最小的正方形是1×1的而田地面积题因内部栅栏的分布可能造成无解情况所以这时需要返回-1这些区别也就是为什么此题不能直接沿用上一题代码的原因此题的解题方法①分别求出水平栅栏和垂直栅栏的间隙集合枚举水平栅栏间隙集合看垂直栅栏集合能否与之构成正方形能的话就逐步更新取最大值②由于间隙出现一次即可所以用Set容器天然去重能够减少遍历次数③求间隙过程中由于四周最外围的栅栏不能移除所以求间隙的时候必须参与运算那要怎样算进去呢可以创建一个临时数组遍历这个临时数组逐步计算间隙存进哈希表咱就可以在遍历前把这两个边界扔进临时数组排个序就能正常求间隙了比如网格高度 m5水平围栏 hFences[2,4]临时数组先把数组扩展成 [2,4,1,5]然后排序成 [1,2,4,5]。接下来两两算差2-114-135-144-225-235-41这些差值1,2,3,4就是水平方向所有可能的边长最后存到集合里返回Java代码class Solution { public int maximizeSquareArea(int m, int n, int[] hFences, int[] vFences) { final int MOD1_000_000_007; //获取水平方向所有可能的间隔长度集合 SetInteger hSetf(hFences,m); //获取垂直方向所有可能的间隔长度集合 SetInteger vSetf(vFences,n); int ret0; //遍历水平方向的所有间隔长度 for(int x:hSet) //如果垂直方向也存在相同的间隔长度说明可以围成边长为x的正方形 if(vSet.contains(x)) //更新最大边长 retMath.max(ret,x); return ret0?(int)((long)ret*ret%MOD):-1; } private SetInteger f(int[] a,int l){ //获取原栅栏数组的长度 //比如水平围栏hFences[2,4],m5 int na.length; //复制原数组并扩容两个位置存储两个边界点1和l //先扩容成[2,4,0,0] aArrays.copyOf(a,n2); //存储起始坐标最左最上边界 //变成[2,4,1,0] a[n]1; //存储结束坐标最右最下边界 //变成[2,4,1,5] a[n]l; //一起排序保证差值为正 //变成[1,2,4,5] Arrays.sort(a); //计算a中任意两个数的差存到哈希表中 SetInteger setnew HashSet(); for(int i0;in;i) for(int ji1;jn;j) set.add(a[j]-a[i]); return set; } }

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

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

立即咨询