您的位置:首页 > 编程语言 > Java开发

Java数组(算法169,747):多数元素,至少是其他数字两倍的最大数

2020-01-14 17:28 441 查看

题目一(多数元素):

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

题目分析:

  1. 从所给数组中找出出现次数大于n/2的数字
  2. 因为是大于n/2的数字,所以只有一个符合要求的数字
  3. 懂得运用该题目的特性进行解题

题目解答:

  1. 方法一(依次遍历):
    找出出现次数大于n/2的数字
    建立两个指针,进行判断是否相等
    若相等,则count++
    若不等,进行下一个判断
    最后判断长度是否大于n/2,并进行输出
  2. 方法二(利用题目)
    从第一个数字开始count
    如果与那个数字相同,视为1
    若不同视为-1
    最后对count的值进行判断

代码实现:

  1. 方法一(依次遍历):
//依次遍历,找出出现次数大于n/2的数字,只有一个符合要求的数字
int max=nums[0];
for(int i=0;i<nums.length;i++){
int count=1;
for(int j=i+1;j<nums.length;j++){
if(nums[i]==nums[j]){
max=nums[i];
count++;
}
}
if(count>(nums.length/2)){
return max;
}
}
  1. 方法二(利用多数元素的性质)
//利用题中性质,从一个数字开始count,如果与那个数字相同,则视为1,如果不同,则视为-1
//最后对count值进行计数判断
for(int i=0;i<nums.length;i++){
int count=1;
for(int j=0;j<nums.length;j++){
if(nums[i]==nums[j]){
count++;
}else{
count--;
}

}
if(count>0){
return nums[i];
}
}
return -1;

代码总结:

  1. 方法一:所占用的空间较大,且代码相比其他的方法过多,不推荐使用;
  2. 方法二:巧妙的运用了多数元素的性质(新思路)

题目二(至少是其他数字两倍的最大数):

在一个给定的数组nums中,总是存在一个最大元素 。
查找数组中的最大元素是否至少是数组中每个其他数字的两倍。
如果是,则返回最大元素的索引,否则返回-1

题目分析:

  1. 遍历找出数组中最大的数字
  2. 这个数字还需要是至少大于数组中其他元素两倍

题目解答:

  1. 利用指针找出最大的数字
  2. 并进行遍历判断,是否大于数组中其他数字的两倍

代码实现:

//找到最大值
int max=nums[0];
int a=0;
for(int i=1;i<nums.length;i++){
if(nums[i]>max){
max=nums[i];
a=i;
}
}
//对最大值进行判断
for(int i=0;i<nums.length;i++){
//对与max的值不同的进行判断
if(a!=i){
if(max<2*nums[i]){
return -1;
}
}
}
return a;

代码总结:

该题目较为简单,思路清晰且正确即可

  • 点赞
  • 收藏
  • 分享
  • 文章举报
天上小鱼的猫 发布了17 篇原创文章 · 获赞 0 · 访问量 452 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐