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

小程序开发平台花多少钱宁波seo网站排名优化公司

小程序开发平台花多少钱,宁波seo网站排名优化公司,做网站需要买服务器么,郑州微信网站数组中出现次数超过一半的数字,这道题出自《剑指Offer》。 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 这里共有三种解法 思路1: 因为要找的数字已经超过长度的一半,我们可以之间把这个数组排序&#xff0…

数组中出现次数超过一半的数字,这道题出自《剑指Offer》。
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
这里共有三种解法

思路1:

因为要找的数字已经超过长度的一半,我们可以之间把这个数组排序,那么这个数一定会出现在数组的中间。

C语言代码

可以使用,冒泡或者快排等其他算法,我这里直接用 qsort函数

//排序规则
int cmp_int(const void* s1,const void* s2);
int majorityElement(int* nums, int numsSize){qsort(nums,numsSize,sizeof(nums[0]),cmp_int);int i = 0;return nums[numsSize/2];
}
int cmp_int(const void* s1,const void* s2)
{return *(int*)s1 - *(int*)s2;
}

Java代码

public int majorityElement(int[] nums) {Arrays.sort(nums);return nums[nums.length/2];}

思路2:

我们可以记录每个数字出现的次数,然后判断最大的那个是不是超过数组长度的一半,C语言有点麻烦就不写了,不过Java可以用HasMap。

Java代码

public int majorityElement(int[] nums) {HashMap<Integer,Integer> map = new HashMap<>();for (int i = 0; i < nums.length; i++) {int tmp = nums[i];if (map.get(tmp) == null) {map.put(tmp,1);}else{map.put(tmp,map.get(tmp)+1);}if (map.get(tmp) > nums.length/2) {return tmp;}}return 0;}

思路三:

现在我们可以换一种思路来想,一个数如果操作数组长度的一半,那么也就是说这个数字的个数比数组其他数字加起来还要多。

那么我们就可以这么做,在遍历数组的时候,记录两个值,一个是数组中的一个数字,另一个则是这个数字的次数,如果遍历到下一个数字和当前记录的数字相同,次数加1,如果不相同个数就减去1,当次数为0时,我们就需要保存下一个数字并把该数字的次数设置为1。

那么最后一个次数为1或者大于等于1的,那么这个数就极有可能就时我们要找的那个数字。
这个思路就类似与拿数组两个不相同的数字之间抵消,因为有个数的个数是大于数组一半的,那么最后的那个数就是我们要找的那个数。

C语言代码

int majorityElement(int* nums, int numsSize){int result = nums[0];//数字int count = 1;//数字出现的字数int i = 0;for (i = 1; i < numsSize; i++) {if (count == 0){//但次数为0的时候,更换成当前数字,并把次数设置为1result = nums[i];count = 1;}else if (nums[i] == result){count++;}else{count--;}}//再次判断该数字个数是否是超过数组长度一半的数字count = 0;for (i = 0; i < numsSize; i++){if (nums[i] == result){count++;}}if (count > numsSize/2){return result;}return -1;
}

Java代码

public int majorityElement(int[] nums) {if (nums == null) {return 0;}//数字int result = nums[0];//数字出现的次数int count = 1;for (int i = 1; i < nums.length; i++) {//数字被抵消,替换为下一个数字if (count == 0) {result = nums[i];count = 1;}else if (nums[i] == result) {//相等就++count++;}else{//不相同就--count--;}}//再次确认这个数组是否超过数组长度的一半count = 0;for (int i = 0; i < nums.length; i++) {if (nums[i] == result) {count++;}}if (count > nums.length/2) {return result;}return 0;}

题目链接 数组中出现次数超过一半的数字

http://www.lbrq.cn/news/2356201.html

相关文章:

  • 广州做网站最好的公司深圳百度推广联系方式
  • 香港服务器做收费网站要付税吗16种营销模型
  • 中国建设银行官网站贺岁产品北京网站制作公司
  • php网站开发结构青岛网络推广
  • 怎么在一个网站做多个页面快链友情链接平台
  • 网站制作时间代码济南百度
  • 网站主机空间引流app推广软件
  • 东莞网站建设制作服务日本疫情最新数据
  • 网站是软件吗百度账号登录入口
  • 网站的主要栏目及功能网站seo优化服务
  • 网站开发的售后 维保新乡网站推广
  • 百度云服务器做asp网站南宁seo主管
  • 代理 指定网站 host宁波网络优化seo
  • 一级a做爰片付费网站高端企业网站定制公司
  • 做英文网站软件培训机构排名
  • 邯山手机网站建设网站的优化策略方案
  • 简单学校网站模板长沙网站优化公司
  • 技术支持 武汉网站建设百度问问首页
  • 大连企业公司网站建设小说推广关键词怎么弄
  • 网站维护提示页面模板外贸网站seo教程
  • 计算机专业论文 网站建设广州网站建设系统
  • 用旧电脑做服务器建网站用网站黄页推广软件
  • 怎样简单做网站生意参谋指数在线转换
  • 网站被做跳转百度统计网站
  • 乌鲁木齐市建设委员会官方网站阿里云自助建站
  • 那个网站做生鲜口碑营销的重要性
  • 网站公司建设都招聘那些职位百度最新版app下载安装
  • 淮安网站建设seo外包公司如何优化
  • 昆山网站舆情分析网站
  • 江门企业网站建设搜狗推广登陆
  • Linux 驱动中 Timer / Tasklet / Workqueue 的作用与对比
  • 使用JS编写一个购物车界面
  • 解决“Windows 无法启动服务”问题指南
  • React -自定义hooks - 封装双向数据绑定
  • 简单2步配置CadenceSkill开发编辑器,支持关键字高亮
  • excel 通过openpyxl表格下载和插入图片