[Leetcode]747. 至少是其他数字两倍的最大数
2018-09-10 11:02
225 查看
747. 至少是其他数字两倍的最大数
在一个给定的数组nums中,总是存在一个最大元素 。
查找数组中的最大元素是否至少是数组中每个其他数字的两倍。
如果是,则返回最大元素的索引,否则返回-1。
示例 1:
输入: nums = [3, 6, 1, 0]
输出: 1
解释: 6是最大的整数, 对于数组中的其他整数,6大于数组中其他元素的两倍。6的索引是1, 所以我们返回1.
示例 2:
输入: nums = [1, 2, 3, 4]
输出: -1
解释: 4没有超过3的两倍大, 所以我们返回 -1.
提示:
1.nums 的长度范围在[1, 50].
2.每个 nums[i] 的整数范围在 [0, 99].
我解决这道题的思路是先将数组从大到小排序,然后看第一个数是否是第二个数的两倍以上,若不是则返回-1,是的话记录最大的数,然后原数组对比,返回最大数的index。
注意:
sort中的比较函数compare要声明为静态成员函数或全局函数,不能作为普通成员函数,则会报错。
Line 7: invalid use of non-static member function ‘bool Solution::compare(int, int)’
原因及解决方法:
非静态成员函数是依赖于具体对象的,而std::sort这类函数是全局的,因此无法再sort中调用非静态成员函数。静态成员函数或者全局函数是不依赖于具体对象的, 可以独立访问,无须创建任何对象实例就可以访问。同时静态成员函数不可以调用类的非静态成员。解决方法即将compare函数声明为静态函数即可。
class Solution { public: int dominantIndex(vector<int>& nums) { int size = nums.size(); if (size <= 1) return false; vector<int> v = nums; sort(v.begin(), v.end(), compare); if ((v[0] != v[1]) && (v[0] >> 1) >= v[1]) { for (int i = 0; i < size; i++) { if (nums[i] == v[0]) return i; } } return -1; } static bool compare(int a, int b) { return a > b; } };
相关文章推荐
- LeetCode 747. 至少是其他数字两倍的最大数(Java语言)
- 747. leetcode至少是其他数字两倍的最大数---java代码
- [Leetcode] 747. 至少是其他数字两倍的最大数 java
- [LeetCode] Largest Number At Least Twice of Others 至少是其他数字两倍的最大数
- (Leetcode) 至少是其他数字两倍的最大数 - Python实现
- 747. 至少是其他数字两倍的最大数
- 数组和字符串//至少是其他数字两倍的最大数
- leetcode747. 至少是其他数字两倍的最大数
- Leetcode747至少是其他数字两倍的最大数
- leetcode 479. Largest Palindrome Product 最大的回文数字 + 直接暴力真好
- 程序员面试金典——解题总结: 9.17中等难题 17.4编写一个方法,找出两个数字中最大的那一个。不得使用if-else或其他比较运算符。
- 【leetcode】对撞指针应用之回文字符串判断(忽略大小写,以及出数字外其他字符)
- [LeetCode] Maximum XOR of Two Numbers in an Array 数组中异或值最大的两个数字
- JavaScript求解数组中除最大值、最小值外其他数字之和
- 编写一个方法,找出两个数字中最大的那一个。不得使用if-else或其他比较运算符。
- LeetCode--Largest Number(最大数字)Python
- Leetcode 949:给定数字能组成的最大时间
- Leetcode1015. 至少有 1 位重复的数字
- Leetcode 179 Largest number (最大的数字 和最小的数字)
- [LeetCode] Maximum Product of Three Numbers 三个数字的最大乘积