# # 747. Largest Number At Least Twice of Others

[leetcode](https://leetcode.com/problems/largest-number-at-least-twice-of-others/description/)

<pre class="language-javascript"><code class="lang-javascript"><strong>/*
</strong><strong>Input: nums = [3,6,1,0]
</strong>Output: 1

Input: nums = [1,2,3,4]
Output: -1
*/

/**
 * @param {number[]} nums
 * @return {number}
 */
var dominantIndex = function(nums) {
    let maxValueIndex = 0
    let doubleNums = [];
    for(let i=0; i&#x3C;nums.length; i++){
        doubleNums[i] = nums[i]*2;
        maxValueIndex = nums[maxValueIndex] > nums[i] ? maxValueIndex : i
    }
    
     for(let i=0; i&#x3C;doubleNums.length; i++){
        if(i!== maxValueIndex &#x26;&#x26; doubleNums[i] > nums[maxValueIndex]){
            return -1
        }
     }
    
    return maxValueIndex
    
};
</code></pre>

### 怎樣可以寫更好

我本來是陣列所有 `item*2` ，然後再逐一比較有沒有大於最大值但這樣要 for 兩次，其實可以找出最大跟第二大就好，若 `second*2 > first 那就 return -1` ，一個 for 就可以搞定

```javascript
/**
 * @param {number[]} nums
 * @return {number}
 */
var dominantIndex = function(nums) {
    let index = 0
    let first = nums[index]
    let second = -Infinity;
    
    for(let i=1; i< nums.length; i++){
        if(nums[i] > first){
            second = first
            first = nums[i]
            index = i
        } else if(nums[i] > second && nums[i] < first) {
            second = nums[i]
        }
    }
    return first >= second*2 ? index : -1
    
};
```

8/13

```javascript
var dominantIndex = function(nums) {
    let max = nums[0];
    let secondMax = -Infinity
    let maxIndex = 0

    for(let i=1; i<nums.length; i++){
        if(nums[i] > max){
            secondMax = max
            max = nums[i]
            maxIndex = i
        } else {
            secondMax = Math.max(secondMax, nums[i])
        }
        
    }
    return max >= secondMax*2 ? maxIndex : -1
};
```
