原地址: https://leetcode-cn.com/explore/learn/card/array-and-string/198/introduction-to-array/771/
在一个给定的数组nums
中,总是存在一个最大元素 。
查找数组中的最大元素是否至少是数组中每个其他数字的两倍。
如果是,则返回最大元素的索引,否则返回-1。
示例 1:
输入: nums = [3, 6, 1, 0]
输出: 1
解释: 6是最大的整数, 对于数组中的其他整数,
6大于数组中其他元素的两倍。6的索引是1, 所以我们返回1.
示例 2:
输入: nums = [1, 2, 3, 4]
输出: -1
解释: 4没有超过3的两倍大, 所以我们返回 -1.
提示:
nums
的长度范围在[1, 50]
.- 每个
nums[i]
的整数范围在[0, 100]
.
我的答案:
class Solution {
public:
int dominantIndex(vector<int>& nums) {
//复制这个数组
vector<int> nums_(nums);
//先查找最大的元素
//使用sort降序排序
sort(nums_.rbegin(),nums_.rend());
//判断最大的元素是否是剩余的nums.size()个元素的两倍
int flag = 1;//假设是其余每一个元素的2倍,如果发现不是2倍则置0,退出循环
for(int i=1;i<nums_.size();i++)
{
if(2*nums_[i] > nums_[0])
{
flag = 0;
break;
}
}
//不是都满足情况,返回-1
if(flag ==0 )
{
return -1;
}
//都满足情况,在原数组中找到这个元素的位置
int j=0;
for(auto i = 0;i<nums.size();i++,j++)
{
if(nums[i]==nums_[0])//如果发现最大值
{
break;
}
}
return j;
}
};
参考链接:sort逆序排序算法
总结:
1、这个题不用考虑负数的情况;不用考虑有多个最大值的情况
2、对sort的用法不熟悉,计算方法比较容易想到,傻小子算法。