当前位置: 首页 > news >正文

永兴做网站聚美优品网站建设分析

永兴做网站,聚美优品网站建设分析,wordpress最大上传2g,评价高的企业网站开发示例 输入:tops [2,1,2,4,2,2], bottoms [5,2,6,2,3,2] 输出:2 解释: 图一表示:在我们旋转之前, tops 和 bottoms 给出的多米诺牌。 如果我们旋转第二个和第四个多米诺骨牌,我们可以使上面一行中的每个…

示例

输入:tops = [2,1,2,4,2,2], bottoms = [5,2,6,2,3,2]
输出:2
解释: 
图一表示:在我们旋转之前, tops 和 bottoms 给出的多米诺牌。 
如果我们旋转第二个和第四个多米诺骨牌,我们可以使上面一行中的每个值都等于 2

对于本题,我的做题思路是先观察后面分支思考,先说说我的观察,通过题目的示例观察,只有当一个数字的总数等于或超过tops.length后才有可能做到交换出一个所有值都同为一个数的数组,通过该规律,我们可以找到我们需要统计的数值mid,然后通过条件判断,如果两个数组中遍历到相同下标时都没出现mid那就直接return false,但我们最后需要的结果是最少交换几次即可,那我们在遍历的时候便可以统计出来,但是当tops和bottoms数组中同时出现mid时就不必要交换了,直接在后面减掉即可。

class Solution {public int minDominoRotations(int[] tops, int[] bottoms) {HashMap<Integer,Integer> maptop = new HashMap<>();HashMap<Integer,Integer> mapbo = new HashMap<>();int n = tops.length;int num = 0;int mid = 0;for(int i=0;i<n;i++){maptop.put(tops[i],maptop.getOrDefault(tops[i],0)+1);mapbo.put(bottoms[i],mapbo.getOrDefault(bottoms[i],0)+1);if(maptop.getOrDefault(tops[i],0)>=(n+1)/2) mid = tops[i];if(mapbo.getOrDefault(bottoms[i],0)>=(n+1)/2) mid = bottoms[i];}if(maptop.getOrDefault(mid,0)+mapbo.getOrDefault(mid,0) < n) return -1;for(int i=0;i<n;i++){if(tops[i]!=mid&&bottoms[i]!=mid) return -1; if(tops[i]==mid&&bottoms[i]==mid) num++;}return Math.min(maptop.get(mid)-num,mapbo.get(mid)-num);}
}

画个图来更好的说明我的思路

说的可能还是不太详细,因为有一些得规避一下,所以代码最后成型如此,比如有长度为7的数组,
那么(int)7/2 = 3,3+3=6<7不可以成立一个值相同的数组,所以要(int)(7+1)/2=4才行,这就是我们需要的mid值,然后后面一遍遍历找出同一个下标下的所有情况。

我们来看下题解又是怎么解决的

class Solution {public int minDominoRotations(int[] tops, int[] bottoms) {int ans = Math.min(minRot(tops, bottoms, tops[0]), minRot(tops, bottoms, bottoms[0]));return ans == Integer.MAX_VALUE ? -1 : ans;}private int minRot(int[] tops, int[] bottoms, int target) {int toTop = 0;int toBottom = 0;for (int i = 0; i < tops.length; i++) {int x = tops[i];int y = bottoms[i];if (x != target && y != target) {return Integer.MAX_VALUE;}if (x != target) {toTop++; // 把 y 旋转到上半} else if (y != target) {toBottom++; // 把 x 旋转到下半}}return Math.min(toTop, toBottom);}
}

以上是灵神的代码,看了下来忽然让我意识到了一点,就是,如果需要一个数组的值全变为同一个数的话,那就一定会是tops[0]或者bottoms[0]

然后后面的步骤都会和我差不多,确定了target后就开始遍历找到最小的反转次数。说是脑筋急转弯也不为过。

http://www.dtcms.com/a/467471.html

相关文章:

  • 实现支持链式调用但构造函数不可链式调用的 JavaScript 类
  • Python 函数与Lambda表达式完整指南
  • Java内存模型与并发编程:如何高效、安全地写并发程序?
  • 哪一个网站做专栏作家好点小程序制作开发定制
  • 《gRPC 与 Thrift 的架构与性能对比 — 实战篇》
  • 【AF-CLIP】的提示方案代码分析
  • 基础算法:双指针
  • 网站建设工作量评估报价表有哪些企业官网做得比较好
  • 【AES加密专题】3.工具函数的编写(1)
  • 台州企业网站排名优化泰州网站设计咨询
  • 网站怎么做子页宜昌seo
  • 网站建设三剑客wordpress 首页图片
  • 构建AI智能体:五十九、特征工程:数据预处理到特征创造的系统性方法
  • 广州企业建站 网络服务企业网站的网址有哪些
  • AI一周事件(2025年10月1日-10月8日)
  • ArrayList底层的实现原理是什么?
  • 商城网站开发商晋中网站seo
  • 网站建设内容保障制度重庆专业微网站建设
  • string(2),咕咕咕!
  • 哪个网站可以做免费推广wordpress的弊端
  • Octave下载和安装教程(附安装包)
  • 江苏省建设工程交易中心网站网站开发三大流行语言
  • 网站打开有声音是怎么做的网页设计超链接
  • PSDNorm:面向睡眠分期的时间归一化新范式
  • 邵阳网站建设哪家好网站一条龙服务
  • 网站系统建设项目wordpress中文教程
  • 佛山制作网站设计报价新开传奇手游新服网
  • 厦门物流网站建设免费用搭建网站
  • asp个人网站公司简介简短大气
  • C++学习记录(17)红黑树简单实现map和set