leetcode747. 至少是其他数字两倍的最大数
2019-01-24 18:07
351 查看
随机一题在一个给定的数组nums中,总是存在一个最大元素 。
查找数组中的最大元素是否至少是数组中每个其他数字的两倍。
如果是,则返回最大元素的索引,否则返回-1。
示例 1:
输入: nums = [3, 6, 1, 0]
输出: 1
解释: 6是最大的整数, 对于数组中的其他整数,
6大于数组中其他元素的两倍。6的索引是1, 所以我们返回1.
示例 2:
输入: nums = [1, 2, 3, 4]
输出: -1
解释: 4没有超过3的两倍大, 所以我们返回 -1.
思路:遍历数组,用一个map存储值和对应的索引,然后去取这个map键值的最大值和第二大的值,如果满足最大值大于或等于第二大的值的两倍就符合,然后返回对应的索引就行了。
class Solution { public: int dominantIndex(vector<int>& nums) { int nCount = nums.size(); if(nCount == 1) return 0; map<int,int> mapIndex; for(int i=0;i<nCount;i++) { mapIndex[nums[i]] = i; } auto itFirMax = mapIndex.end(); --itFirMax; int nFirMax = itFirMax->first; auto itSecMax = itFirMax; --itSecMax; int nSecMax = itSecMax->first; if(nFirMax >= 2*nSecMax) return itFirMax->second; return -1; } };
相关文章推荐
- 数组和字符串//至少是其他数字两倍的最大数
- [LeetCode] Largest Number At Least Twice of Others 至少是其他数字两倍的最大数
- [Leetcode] 747. 至少是其他数字两倍的最大数 java
- JavaScript求解数组中除最大值、最小值外其他数字之和
- 程序员面试金典——解题总结: 9.17中等难题 17.4编写一个方法,找出两个数字中最大的那一个。不得使用if-else或其他比较运算符。
- 编写一个方法,找出两个数字中最大的那一个。不得使用if-else或其他比较运算符。
- 在数组中找到至少包含一个数字的子阵具有最大的乘积
- 动态规划(二)暴力递归的优化之路——数字三角形最大路径和
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。 请写程序找出这两个只出现一次的数字。
- 【练习】从一组数字中找出最大的几个,用堆完成
- 有一篇文章,共有三行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。
- .net(c#) winform文本框只能输入数字,不能其他非法字符
- 编写一个能将给定非负整数数组中的数字排列成最大数字的函数
- 求一个矩阵中连续四个数字(行,列,正、反对角线)乘积的最大值。
- 统计字符串中字母、数字、空格以及其他的个数
- 阻止资深程序员技术进步的最大敌人就是开始做管理,做管理至少毁了中国90%的好程序员。
- 微软100题(87)最大连续递增数字串
- 显示一串数字的最大数及最大数出现的次数
- 统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数。(不考虑其他字符)
- 只允许input框输入数字,输入其他的键的时候,直接不显示的方法