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

网站开发与托管协议/微信视频号可以推广吗

网站开发与托管协议,微信视频号可以推广吗,沧州网站优化,如何注册公司营业执照题目链接 题目理解: 初看题意很难理解,但结合实例即可明白所表达意思。我们所要做的即统计出数组中每个元素的频度,得到频度最大的元素,然后找包含这个元素的子数组中长度最短的,很容易知道以这个重复元素为头尾的既是…

题目链接

题目理解:

初看题意很难理解,但结合实例即可明白所表达意思。我们所要做的即统计出数组中每个元素的频度,得到频度最大的元素,然后找包含这个元素的子数组中长度最短的,很容易知道以这个重复元素为头尾的既是最短的,注意频度最大的元素可能不唯一,所以我们要比较找出对应长度最短的子数组。

具体解法:

哈希表

每一个数映射到一个长度为 33 的数组,数组中的三个元素分别代表这个数出现的次数、这个数在原数组中第一次出现的位置和这个数在原数组中最后一次出现的位置。当我们记录完所有信息后,我们需要遍历该哈希表,找到元素出现次数最多,且前后位置差最小的数。

class Solution {public int findShortestSubArray(int[] nums) {Map<Integer,int[]>map=new HashMap<>();int n=nums.length;for (int i = 0; i <n; i++) {if(map.containsKey(nums[i])){map.get(nums[i])[0]++;//度map.get(nums[i])[2]=i;//改变结束位置}else{map.put(nums[i],new int[]{1,i,i});}}int maxNUm=0,minLen=0;for (Map.Entry<Integer,int[]> entry:map.entrySet()){int[] arr= entry.getValue();if(maxNUm<arr[0]){maxNUm=arr[0];minLen=arr[2]-arr[1]+1;}else if(maxNUm==arr[0]){if(minLen>arr[2]-arr[1]+1) minLen=arr[2]-arr[1]+1;}}return minLen;}
}

静态数组完成哈希表构建

class Solution {int N=50001;public int findShortestSubArray(int[] nums) {int n= nums.length;int[] cnt=new int[N];int[] first=new int[N];//统计开始位置int[] last=new int[N];//统计结束位置Arrays.fill(first,Integer.MAX_VALUE);int max=0;for (int i = 0; i <n; i++) {int t=nums[i];max=Math.max(max,++cnt[t]);first[t]=Math.min(first[t],i);last[t]=Math.max(last[t],i);}int ans=Integer.MAX_VALUE;for (int i = 0; i <n; i++) {int t=nums[i];if(cnt[t]==max) ans=Math.min(ans,last[t]-first[t]+1);}return ans;}
}

哈希+滑动窗口

class Solution {int N=50009;public int findShortestSubArray(int[] nums) {int n= nums.length;int[] cnt=new int[N];int[] first=new int[N];int[] last=new int[N];Arrays.fill(first,Integer.MAX_VALUE);int max=0;for (int i = 0; i <n; i++) {int t=nums[i];max=Math.max(max,++cnt[t]);first[t]=Math.min(first[t],i);last[t]=Math.max(last[t],i);}int ans=Integer.MAX_VALUE;for (int i = 0; i <n; i++) {int t=nums[i];if(cnt[t]==max) ans=Math.min(ans,last[t]-first[t]+1);}return ans;}
}

补充:

哈希表 = 哈希函数 + 数组
由于哈希函数计算需要消耗时间(Java 中首先涉及自动装箱/拆箱,之后还要取对象的 hashCode 进行右移异或,最后才计算哈希桶的下标),以及处理哈希冲突的开销。其效率必然比不上使用我们静态数组进行计数。
对于那些 数值范围确定且不太大(106 以内)的计算场景,使用数组进行计数,而不是使用哈希表。

References

  1. 「数组计数」 & 「哈希表计数」解法,以及该如何选择两者
  2. 数组的度
http://www.lbrq.cn/news/1420129.html

相关文章:

  • 手机网站吧/四川seo推广公司
  • 做外贸网站义乌/app推广赚钱
  • 可以网站可以做免费的文案广告语/杭州网站优化搜索
  • 建设网站需要什么条件/刷神马网站优化排名
  • 广东深圳网站建设服务/网页制作咨询公司
  • 产品发布网站/站长工具ip地址查询域名
  • 中企业网站建设/北京首页关键词优化
  • 公司做网站怎么做/网奇seo赚钱培训
  • 眉山市住房和城乡建设局网站/网站搜索引擎拓客
  • 辽宁省政府网站集约化建设/东莞百度seo排名
  • 电商付费推广有哪些/东莞网站建设优化技术
  • 新昌网站开发/近期国内新闻热点事件
  • 潍坊网站建设定制/sem竞价
  • wordpress图片添加音乐/广州百度seo公司
  • 南京建设集团网站/温州seo按天扣费
  • 进口彩妆做的好的网站/宁波企业seo外包
  • 郑州疫情最新通报/做排名优化
  • 如何构建企业网站/网站排名分析
  • 高质量的南京网站建设/龙岩网站推广
  • 电影日记网站怎么做/新东方考研培训机构官网
  • 橙子建站是什么东西/外贸网站搭建
  • 网站群建设的目的/百度收录查询
  • 企业管理培训课程心得/seo页面内容优化
  • 播视频网站开发/百度客服人工电话
  • 高淳网站建设/数据分析师证书
  • 哪里有营销型网站制作/河北企业网站建设
  • 网商之窗官网/关于seo的行业岗位有哪些
  • 网站如何做单项链接/国际新闻头条今日要闻
  • 泉州网站建设开发/企业官网
  • wordpress搜索收录/外贸建站优化
  • Gradle#构建生命周期三个阶段
  • 机器学习——PCA算法
  • C语言指针运算题
  • Day2--滑动窗口与双指针--2090. 半径为 k 的子数组平均值,2379. 得到 K 个黑块的最少涂色次数,2841. 几乎唯一子数组的最大和
  • tailscale远程服务器连接局域网方案(解决境外服务器网速慢的问题)
  • AutoSar AP平台中EM,CM,SM,PHM,LT等AP基础软件都有宿主进程吗