[LeetCode] Largest Number At Least Twice of Others 至少是其他數字兩倍的最大數


 

In a given integer array nums, there is always exactly one largest element.

Find whether the largest element in the array is at least twice as much as every other number in the array.

If it is, return the index of the largest element, otherwise return -1.

Example 1:

Input: nums = [3, 6, 1, 0]
Output: 1
Explanation: 6 is the largest integer, and for every other number in the array x,
6 is more than twice as big as x.  The index of value 6 is 1, so we return 1.

 

Example 2:

Input: nums = [1, 2, 3, 4]
Output: -1
Explanation: 4 isn't at least as big as twice the value of 3, so we return -1.

 

Note:

  1. nums will have a length in the range [1, 50].
  2. Every nums[i] will be an integer in the range [0, 99].

 

這道題讓我們找一個至少是其他數字兩倍的最大數字,那么我們想,首先明確的一點是這個要求的數字一定是數組中的最大數字,因為其是其他所有的數字的至少兩倍。然后就是,如果該數字是數組中第二大的數字至少兩倍的話,那么它一定是其他所有數字的至少兩倍,所以我們可以遍歷一次數組分別求出最大數字和第二大數字,然后判斷一下最大數字是否是第二大數字的兩倍即可,注意這里我們判斷兩倍的方法並不是直接相除,為了避免除以零的情況,我們采用減法,參見代碼如下:

 

解法一:

class Solution {
public:
    int dominantIndex(vector<int>& nums) {
        int mx = INT_MIN, secondMx = INT_MIN, mxId = 0;
        for (int i = 0; i < nums.size(); ++i) {
            if (nums[i] > mx) {
                secondMx = mx;
                mx = nums[i];
                mxId = i;
            } else if (nums[i] > secondMx) {
                secondMx = nums[i];
            }
        }
        return (mx - secondMx >= secondMx) ? mxId : -1;
    }
};

 

當然我們也可以使用更straightforward的方法,首先遍歷一遍數組找出最大數字,然后再遍歷一遍數組,驗證這個數字是否是其他數字的至少兩倍,參見代碼如下:

 

解法二:

class Solution {
public:
    int dominantIndex(vector<int>& nums) {
        int mx = INT_MIN, mxId = 0;
        for (int i = 0; i < nums.size(); ++i) {
            if (mx < nums[i]) {
                mx = nums[i];
                mxId = i;
            }
        }
        for (int num : nums) {
            if (mx != num && mx - num < num) return -1;
        }
        return mxId;
    }
};

 

LeetCode All in One 題目講解匯總(持續更新中...)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM