Java数组(算法169,747):多数元素,至少是其他数字两倍的最大数
2020-01-14 17:28
441 查看
题目一(多数元素):
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
题目分析:
- 从所给数组中找出出现次数大于n/2的数字
- 因为是大于n/2的数字,所以只有一个符合要求的数字
- 懂得运用该题目的特性进行解题
题目解答:
- 方法一(依次遍历):
找出出现次数大于n/2的数字
建立两个指针,进行判断是否相等
若相等,则count++
若不等,进行下一个判断
最后判断长度是否大于n/2,并进行输出 - 方法二(利用题目)
从第一个数字开始count
如果与那个数字相同,视为1
若不同视为-1
最后对count的值进行判断
代码实现:
- 方法一(依次遍历):
//依次遍历,找出出现次数大于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; } }
- 方法二(利用多数元素的性质)
//利用题中性质,从一个数字开始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;
代码总结:
- 方法一:所占用的空间较大,且代码相比其他的方法过多,不推荐使用;
- 方法二:巧妙的运用了多数元素的性质(新思路)
题目二(至少是其他数字两倍的最大数):
在一个给定的数组nums中,总是存在一个最大元素 。
查找数组中的最大元素是否至少是数组中每个其他数字的两倍。
如果是,则返回最大元素的索引,否则返回-1
题目分析:
- 遍历找出数组中最大的数字
- 这个数字还需要是至少大于数组中其他元素两倍
题目解答:
- 利用指针找出最大的数字
- 并进行遍历判断,是否大于数组中其他数字的两倍
代码实现:
//找到最大值 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;
代码总结:
该题目较为简单,思路清晰且正确即可
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- [Leetcode] 747. 至少是其他数字两倍的最大数 java
- 747. leetcode至少是其他数字两倍的最大数---java代码
- LeetCode 747. 至少是其他数字两倍的最大数(Java语言)
- 747. 至少是其他数字两倍的最大数
- [Leetcode]747. 至少是其他数字两倍的最大数
- 数组和字符串//至少是其他数字两倍的最大数
- (Leetcode) 至少是其他数字两倍的最大数 - Python实现
- 一道Google算法题:给一个长度为2N的非负整数数组arr。现在每次删除最左端或最右端的元素,重复N次为止。请返回被删掉的数字之和最大是多少。
- [LeetCode] Largest Number At Least Twice of Others 至少是其他数字两倍的最大数
- leetcode747. 至少是其他数字两倍的最大数
- Java从键盘中读取一串数字存入数组,并返回元素组成的最大数
- 算法:数组找出2个只出现一次的数字(其他元素出现两次)
- Leetcode747至少是其他数字两倍的最大数
- java 输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
- 设计一个最优算法来查找n个元素数组中的最大值和最小值
- 蓝桥杯 算法训练 寻找数组中最大值 JAVA
- JAVA代码—算法基础:找出整形数组中只出现过1次的两个元素
- 算法之道---寻找多数元素算法(Java)
- 每天学习一算法系列(5)(已知两个数组,数组里的元素有正有负,但是都是按照从小到大已经排好序,要求用尽可能小的时间复杂度编写一算法求出两个数组的最大交集)
- java 输入一个数字组成的数组(输出该数组的最大值和最小值)