更多LeetCode解题详解

Easy

Given an array arr of integers, check if there exists two integers N and M such that N is the double of M ( i.e. N = 2 * M).

More formally check if there exists two indices i and j such that :

i != j 0 <= i, j < arr.length arr[i] == 2 * arr[j]

  1. Example 1:
  2. Input: arr = [10,2,5,3]
  3. Output: true
  4. Explanation: N = 10 is the double of M = 5,that is, 10 = 2 * 5.
  1. Example 2:
  2. Input: arr = [7,1,14,11]
  3. Output: true
  4. Explanation: N = 14 is the double of M = 7,that is, 14 = 2 * 7.
  1. Example 3:
  2. Input: arr = [3,1,7,11]
  3. Output: false
  4. Explanation: In this case does not exist N and M, such that N = 2 * M.

Constraints:

2 <= arr.length <= 500 -10^3 <= arr[i] <= 10^3


有近半月没有做题了,先做道简单题吧。给一个数字数组,判断数组中是否存在一个数是另一数的2倍大小。

  • force暴力拆解法
  • map + 两次循环
  • set + 一次循环

force暴力拆解法

暴力拆解法就是双次循环,每次对两个值进行判断

  • 复杂度分析

    • 时间复杂度:O(N^2), N是数组长度
    • 空间复杂度:O(N)
  1. /**
  2. * @param {number[]} arr
  3. * @return {boolean}
  4. */
  5. var checkIfExist = function(arr) {
  6. for (let i = 0; i < arr.length; i++) {
  7. for (let j = 0; j < arr.length; j++) {
  8. if (arr[i] == 2 * arr[j] && i !== j)
  9. return true
  10. }
  11. }
  12. return false
  13. };

map

通过使用map,存储arr的值和下标。在第二次循环arr时,通过比较该值的双倍是否在map中存在,如果存在,并且下标不一致,就返回true。

  • 复杂度分析

    • 时间复杂度:O(N), N是数组长度
    • 空间复杂度:O(N)
  1. /**
  2. * @param {number[]} arr
  3. * @return {boolean}
  4. */
  5. var checkIfExist = function(arr) {
  6. let map = new Map()
  7. for (let i = 0; i < arr.length; i++) {
  8. map.set(arr[i], i)
  9. }
  10. for (let i = 0; i < arr.length; i++) {
  11. let double = arr[i] * 2
  12. if (map.has(double) && map.get(double) !== i) return true
  13. }
  14. return false
  15. };

set

循环时判断,该值的一半或者2倍是否在set中存在,如果存在,就返回true,如果不在,则使用set来存储该循环中值。

  • 复杂度分析

    • 时间复杂度:O(N), N是数组长度
    • 空间复杂度:O(N)
  1. /**
  2. * @param {number[]} arr
  3. * @return {boolean}
  4. */
  5. var checkIfExist = function(arr) {
  6. let set = new Set()
  7. for (let i of arr) {
  8. if (set.has(2*i) || i % 2 == 0 && set.has(Math.floor(i / 2))) return true
  9. set.add(i)
  10. }
  11. return false
  12. };

来源

【2020-02-11】1346. Check If N and Its Double Exist的更多相关文章

  1. 【2020.02.01NOIP普及模拟4】怪兽

    [2020.02.01NOIP普及模拟4]怪兽 文章目录 [2020.02.01NOIP普及模拟4]怪兽 题目描述 输入 输出 输入输出样例 数据范围限制 提示 解析 code 题目描述 PYWBKT ...

  2. 【Java虚拟机11】线程上下文类加载器

    前言 目前学习到的类加载的知识,都是基于[双亲委托机制]的.那么JDK难道就没有提供一种打破双亲委托机制的类加载机制吗? 答案是否定的. JDK为我们提供了一种打破双亲委托模型的机制:线程上下文类加载 ...

  3. SpringCloud、Nginx高并发核心编程 【2020年11月新书 】

    文章太长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典极品 : 三大本< Java 高并发 三部曲 > 面试 + 大厂 + 涨薪必备 疯狂创客圈 经 ...

  4. Axure9 v9.0.0.3629 ~ v9.0.0.3633 授权密钥 【2019.02.05】

    现在提供一个支持v9.0.0.3629.v9.0.0.3630.v9.0.0.3631.v9.0.0.3632.v9.0.0.3633的授权码(后续的Beta更新版本应该能继续使用) 被授权人:zd4 ...

  5. 【模拟8.11】将军令(贪心&&树形DP)

    只看45分的话,是树形DP....(当然也有能拿到70分+的大佬) 40分: 只考虑k==1的情况,树形DP 所以每个节点可能被父亲,自己,儿子控制 设f[MAXN][3],0表示儿子,1表示自己,2 ...

  6. 【驱动笔记11】使用DeviceIoControl通信

    文章作者:grayfox作者主页:http://nokyo.blogbus.com原始出处:http://www.blogbus.com/nokyo-logs/34018521.html 在我昨日发布 ...

  7. 【浅析C++11】std::function和std::bind

    目录 std::function可调用对象包装器 std::function基本用法 std::function/std::bind与抽象工厂.工厂方法的一点思考 std::function可调用对象 ...

  8. 【Python】【demo实验11】【练习实例】【三个整数的立方和】

    目的:找到 除了9n±4型自然数外,所有100以内的自然数都能写成三个整数的立方和    这每个数的表达方式: 源代码: #!/usr/bin/python # encoding=utf-8 # -* ...

  9. 最全Python学习路线图【2020最新版】

    2020年最新的python学习大纲,专为python高薪打造另外很多人在学习Python的过程中,往往因为没有好的教程或者没人指导从而导致自己容易放弃,为此我建了个Python交流.裙 :一久武其而 ...

随机推荐

  1. QTableWiget的简单使用

    QTableWidget是QT程序中常用的显示数据表格的空间,很类似于VC.C#中的DataGrid.说到QTableWidget,就必须讲一下它跟QTabelView的区别了.QTableWidge ...

  2. 使用K均值算法进行图片压缩

    K均值算法   上一期介绍了机器学习中的监督式学习,并用了离散回归与神经网络模型算法来解决手写数字的识别问题.今天我们介绍一种机器学习中的非监督式学习算法--K均值算法.   所谓非监督式学习,是一种 ...

  3. 关于Integer 和Double包装类创建对象时的底层解析

    public void method1() { Integer i = new Integer(1); Integer j = new Integer(1); System.out.println(i ...

  4. AcWing 240. 食物链 | 并查集

    传送门 题目描述 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形. A吃B, B吃C,C吃A. 现有N个动物,以1-N编号. 每个动物都是A,B,C中的一种,但是我们并不知道它到底 ...

  5. 【转】C#虚方法virtual详解

    转:https://www.cnblogs.com/zhaoshujie/p/10502404.html 在C++.Java等众多OOP语言里都可以看到virtual的身影,而C#作为一个完全面向对象 ...

  6. 关于javaweb开发的环境搭建(一)Tomcat

    进行Tomcat的下载及环境配置 1.下载地址   http://tomcat.apache.org/ 2.下载的注意事项   下载的Tomcat版本要与自身电脑安装的java版本相匹配,下载时,点击 ...

  7. TensorFlow——Graph的基本操作

    1.创建图 在tensorflow中,一个程序默认是建立一个图的,除了系统自动建立图以外,我们还可以手动建立图,并做一些其他的操作. 下面我们使用tf.Graph函数建立图,使用tf.get_defa ...

  8. 使用zipwithindex 算子给dataframe增加自增列 row_number函数实现自增,udf函数实现自增

    DataFrame df = ...StructType schema = df.schema().add(DataTypes.createStructField("id", Da ...

  9. linux下 Error in 'python3':free(): invalid pointer

    linux下坑人的报错!折腾了好久. 现象:这次是一个底层库 C++,底层库之上一层SDK C++,之上再一层so库,用python调用SDK.然后python层依赖了opencv和SDK,调换ope ...

  10. 高校表白app使用体验

    在本次软件工程专业交流会中,有幸了解了很多学长学姐研究并且开发的软件,使我受益匪浅.其中最让我记忆犹新的还属一款名为高校表白app的软件.首先这款app的主要功能是为我们提供一个委婉的告白平台,我们可 ...