壹 ❀ 引

刷leetcode的第二天,那么今天做的也是一道难度为简单的题目至少是其他数字的两倍的最大数,老规矩,先说说我的实现思路后,再来分析优质答案,原题如下:

在一个给定的数组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].

那么本文开始。

贰 ❀ 听风是风不太聪明的实现

先说说我的实现,当然这段只是记录我在解题过程的思路,大家可以跳过直接看优质答案。

分析下题目,一个数组中如果最大的元素比其它元素都要大至少两倍,便返回最大元素的索引,如果有一个不满足则返回-1。

所以我想到先保存数组中最大元素的索引,然后从小到大排序,这样最大的元素在数组末尾,并分别与前面的元素做比较,直接贴代码:

/**
* @param {number[]} nums
* @return {number}
*/
var dominantIndex = function(nums) {
let len = nums.length,
result = 1;
// 如果数组只有一位,不用比较,直接返回索引0
if (len < 2) {
return 0;
};
// 记录最大值索引
var maxIndex = nums.indexOf(Math.max.apply(null, nums));
// 对数组进行排序
nums.sort((a, b) => a - b);
for (let i = 0; i < len - 1; i++) {
if (nums[len - 1] / nums[i] < 2) {
// 只要有一个不满足直接跳出循环
result = -1;
return result;
};
};
return maxIndex;
};

特别说明,题目要求的数组长度范围是[1,50],所以会存在数组只有一个元素的情况,我也是没仔细审题,所以第一次提交挂掉了,后面补了len < 2的情况。实现看起来很臃肿,我自己也这么觉得,来看看别人的思路。

叁 ❀ 优质解答

在我去看答案时瞟到了这样一句话,如果数组中最大的元素除2比第二大的元素还要大,这说明数组最大元素除2一定比所有元素都大!我顿时脑中闪过了一道闪电!

原来是这样!!!!这个思路直接秒杀我的实现,直接上代码:

/**
* @param {number[]} nums
* @return {number}
*/
var dominantIndex = function(nums) {
let len = nums.length;
// 如果数组只有一位,不用比较,直接返回索引0
if (len < 2) {
return 0;
};
// 记录最大值索引
let maxIndex = nums.indexOf(Math.max.apply(null, nums));
// 对数组进行排序
nums.sort((a, b) => a - b);
return nums[len - 1] / 2 >= nums[len - 2] ? maxIndex : -1;
};

这里还是做了排序,直接比较最后一位与倒数第二位,这个思路真的是太厉害了,像我这种脑瓜子就是没想上去...

最后还有个更厉害的实现,这里借用用户caoyq0521的实现代码:

/**
* @param {number[]} nums
* @return {number}
*/
var dominantIndex = function(nums) {
let max = Math.max(...nums);
let index = nums.indexOf(max);
nums = nums.filter(item => 2 * item > max);
return nums.length > 1 ? -1 : index;
};

比较惊奇没做排序,而是直接找出数组中最大元素与该元素的索引,之后对整个数组过滤,看看有没有元素乘2比最大元素还大,由于过滤过程中会遇到最大元素与自身毕竟的情况,所以最后三元的判断是nums.length > 1,毕竟最大元素乘2肯定会比自己大,这个思路也是极其巧妙,也是该题实现中耗时特别短的答案,超级佩服!

那么关于这道题就记录到这了,本文结束!

JS leetcode 至少是其他数字的两倍的最大数 解答思路分析的更多相关文章

  1. [LeetCode] Largest Number At Least Twice of Others 至少是其他数字两倍的最大数

    In a given integer array nums, there is always exactly one largest element. Find whether the largest ...

  2. LeetCode:至少是其他数字两倍的最大数【747】

    LeetCode:至少是其他数字两倍的最大数[747] 题目描述 在一个给定的数组nums中,总是存在一个最大元素 . 查找数组中的最大元素是否至少是数组中每个其他数字的两倍. 如果是,则返回最大元素 ...

  3. Java实现 LeetCode 747 至少是其他数字两倍的最大数(暴力)

    747. 至少是其他数字两倍的最大数 在一个给定的数组nums中,总是存在一个最大元素 . 查找数组中的最大元素是否至少是数组中每个其他数字的两倍. 如果是,则返回最大元素的索引,否则返回-1. 示例 ...

  4. [Swift]LeetCode747. 至少是其他数字两倍的最大数 | Largest Number At Least Twice of Others

    In a given integer array nums, there is always exactly one largest element. Find whether the largest ...

  5. Leetcode747至少是其他数字两倍的最大数

    Leetcode747至少是其他数字两倍的最大数 在一个给定的数组nums中,总是存在一个最大元素 .查找数组中的最大元素是否至少是数组中每个其他数字的两倍.如果是,则返回最大元素的索引,否则返回-1 ...

  6. [LC]747题 Largest Number At Least Twice of Others (至少是其他数字两倍的最大数)

    ①中文题目 在一个给定的数组nums中,总是存在一个最大元素 . 查找数组中的最大元素是否至少是数组中每个其他数字的两倍. 如果是,则返回最大元素的索引,否则返回-1. 示例 1: 输入: nums ...

  7. Leetcode747.Largest Number At Least Twice of Others至少是其他数字两倍的最大数

    在一个给定的数组nums中,总是存在一个最大元素 . 查找数组中的最大元素是否至少是数组中每个其他数字的两倍. 如果是,则返回最大元素的索引,否则返回-1. 示例 1: 输入: nums = [3, ...

  8. C#LeetCode刷题之#747-至少是其他数字两倍的最大数( Largest Number At Least Twice of Others)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3746 访问. 在一个给定的数组nums中,总是存在一个最大元素 ...

  9. LeetCode747 至少是其他数字两倍的最大数

    在一个给定的数组nums中,总是存在一个最大元素 . 查找数组中的最大元素是否至少是数组中每个其他数字的两倍. 如果是,则返回最大元素的索引,否则返回-1. 示例 1: 输入: nums = [3, ...

  10. 转:JS判断值是否是数字(两种方法)

    JS判断值是否是数字   1.使用isNaN()函数 isNaN()的缺点就在于 null.空格以及空串会被按照0来处理 NaN: Not a Number /***判断是否是数字***/ 1 2 3 ...

随机推荐

  1. asio 使用 openssl 示例

    #include <boost/asio.hpp> #include <boost/asio/ssl.hpp> #include <boost/algorithm/str ...

  2. Python定位错误:段错误 (核心已转储)

    技术背景 在各种编程语言中都有可能会遇到这样一个报错:"段错误 (核心已转储)".显然是编写代码的过程中有哪里出现了问题,但是这个报错除了这几个字以外没有任何的信息,我们甚至不知道 ...

  3. 【MLA】内存泄漏检查

    项目地址:skullboyer/MLA (github.com) 介绍 MLA 即 Memory Leak Analyzer,是一个排查内存泄漏的分析器 实现机制是在malloc时记录分配位置信息,在 ...

  4. 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.12.10)

    一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...

  5. [转帖]高并发下nginx配置模板

    user web;       # One worker process per CPU core.   worker_processes 8;       # Also set   # /etc/s ...

  6. [转帖]ss 输出格式说明

    ss 命令输出详解ss 全名socket statistics,是iproute2中的一员ss已经替代netstat,大热于江湖.但是关于ss命令输出的内容,是什么意思呢? [root@test]#  ...

  7. [转帖]TiKV & TiFlash 加速复杂业务查询丨TiFlash 应用实践

    返回全部 边城元元案例实践2022-08-02 复杂业务查询对于传统的关系型数据库来说是一种考验,而通过 TiKV 行存与 TiFlash 的列存结合使用就能很好地应对.本文根据 TUG 用户边城元元 ...

  8. nginx 进行目录浏览的简单配置

    1. 公司网络安全不让用vsftpd的匿名网络访问了, 没办法 只能够使用 nginx 通过http协议来处理. 2. 最简单的办法就是另外开一个nginx进程简单设置一下nginx的配置文件 wor ...

  9. expect 的简单学习与使用

    背景 最近工作中总有很多重复的事项. 比较繁琐,想着能够简单一点是一点的角度 准备采用expect来建华部分工作量. 其实还可以使用其他方式来处理. 但是感觉expect还是能够简单明了的. 所以暂时 ...

  10. 400G 光模块的价格

    400G 光模块的价格  令人惊叹... https://www.fs.com/cn/c/40g-100g-transceivers-889?pro_type=&sortby=priced&a ...