壹 ❀ 引

刷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. 05_删除链表的倒数第N个节点

    删除链表的倒数第N个节点 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 示例 1: 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 示例 2: ...

  2. asp.net core之Kestrel

    简介 在ASP.NET Core中,Kestrel是一个重要的组件,它是一个跨平台的.开源的Web服务器,专门为ASP.NET Core应用程序而设计.Kestrel以其轻量级和高性能而闻名,本文将介 ...

  3. Angular系列教程之组件

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  4. [转帖]Prometheus Shell Exporter

    Shell Exporter can execute Powershell or Bash scripts and transform its output to Prometheus metrics ...

  5. [转帖]2.2.1 Lightning 工作原理

    https://book.tidb.io/session2/chapter2/lightning-internal.html TiDB Lightning 工具支持高速导入 Mydumper 和 CS ...

  6. [转帖]009 Linux 文件大小统计与排序 (du 于 df 和 sort)

    https://my.oschina.net/u/3113381/blog/5463932 01 du 与 df 作用与区别? Linux 最有用最常用的统计文件大小命令是什么?无疑就是 du 和 d ...

  7. 使用 inotifywait的方式监控文件夹发生变化后自动执行脚本的方法

    0. 先安装inotify 最简单的方法为: yum install epel-release 安装扩展包源 yum install inotify-tools 1. 从网上抄了一下脚本 简单记录一下 ...

  8. bean的一生

    你曾读spring源码 "不知所云"."绞尽脑汁"."不知所措"嘛 那这篇文章可能会对你有所帮助,小编尝试用简单.易懂的例子来模拟sprin ...

  9. vscode推荐插件

    js相关的插件 JavaScript (ES6) code snippets Babel ES6/ES7 html css 汉化 Chinese (Simplified) (简体中文) Languag ...

  10. vue3跟新视图遇见神奇现象

    场景描述 今天遇见一个问题, tableAllFun 函数中写了一个 index=1; 然后在 otherAllFun 函数中去改变这个index=2的值 奇怪的事情发生了 在视图index展示的值是 ...