通过万岁!!!
- 题目:找到数组中的最大的数,然后看看这个数是不是都大于等于其他数的两倍。如果是返回这个数的下标,否则返回-1。特殊情况,当数组长度是1的时候,返回0。
- 思路:找到最大的和第二大的即可,只要最大的大于第二大的两倍,然后直接返回就行了。可以用排序,但是也可以用一层for找。
- 技巧:
- 直接用一层for,找最大的,并且找第二大的,还需要记录最大的下标
伪代码
首先判断数组长度要是=1,则直接return 0即可
定义最大的和第二大的数的变量,默认设置成0
定义最大的数的下标,默认是-1即可。
for变量数组
当前数要是大于最大的数,则之前的最大的给第二大的,现在这个数给最大的,并记录下标,然后直接continue
第二大的数和当前数进行比较,要是大于第二大的数,则将这个数给第二大的。
最后看看最大的是不是大于第二大的两倍,如果是返回最大的下标
否则返回-1即可
java代码
class Solution {
public int dominantIndex(int[] nums) {
if (nums.length == 1) return 0;
int first = 0, second = 0;
int firstIdx = -1;
for (int i = 0; i < nums.length; i++) {
if (nums[i] > first) {
second = first;
first = nums[i];
firstIdx = i;
continue;
}
second = second < nums[i] ? nums[i] : second;
}
if (first >= 2 * second)
return firstIdx;
else return -1;
}
}
- 总结:题目不难,主要是理解题目意思,也没有什么技巧,用排序也是可以的。