当前位置: 代码迷 >> 综合 >> 寒假每日一题(day13)
  详细解决方案

寒假每日一题(day13)

热度:61   发布时间:2023-12-03 07:03:05.0

747. 至少是其他数字两倍的最大数

给你一个整数数组 nums ,其中总是存在 唯一的 一个最大整数 。

请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。如果是,则返回 最大元素的下标 ,否则返回 -1 。

示例 1:

输入:nums = [3,6,1,0]
输出:1
解释:6 是最大的整数,对于数组中的其他整数,6 大于数组中其他元素的两倍。6 的下标是 1 ,所以返回 1 。

示例 2:

输入:nums = [1,2,3,4]
输出:-1
解释:4 没有超过 3 的两倍大,所以返回 -1 。

示例 3:

输入:nums = [1]
输出:0
解释:因为不存在其他数字,所以认为现有数字 1 至少是其他数字的两倍。

提示:

  • 1 <= nums.length <= 50
  • 0 <= nums[i] <= 100
  • nums 中的最大元素是唯一的

 终于到了简单题时间,普天同庆了属于是☆*: .?. o(≧▽≦)o .?.:*☆

这次的题目很简单,题干说要求最大值至少是其他值的两倍,事实上我们只需要将最大值和第二大的值进行比较即可,如果最大值比第二大值大两倍,那么其他值必定是两倍以上

所以我们先写找出最大值和第二大值的方法

最大值:

    public int maxNumber(int[] nums){int max=0;for (int i=0;i<nums.length;i++){if (nums[i]>nums[max]){max=i;}}return max;}

第二大值:

    public int secondMaxNumber(int[] nums,int max){int secondMax=0;if(max==0){secondMax=1;}for (int i=0;i<nums.length;i++){if (nums[i]>nums[secondMax] && nums[i]<nums[max]){secondMax=i;}}return secondMax;}

然后进行比较就行

数组单一元素的情况我们可以单独列出来

    public int dominantIndex(int[] nums) {int max=0;int secondMax=0;if(nums.length==1){return 0;}max=maxNumber(nums);secondMax=secondMaxNumber(nums,max);if (nums[secondMax]*2<=nums[max]){return max;}else {return -1;}}