求:

给你一个整数数组 arr,请你检查是否存在两个整数 N 和 M,满足 N 是 M 的两倍(即,N = 2 * M)。

更正式地,检查是否存在两个下标 i 和 j 满足:

i != j

0 <= i, j < arr.length

arr[i] == 2 * arr[j]

示例 1:

输入:arr = [10,2,5,3]

输出:true

解释:N = 10 是 M = 5 的两倍,即 10 = 2 * 5 。

示例 2:

输入:arr = [7,1,14,11]

输出:true

解释:N = 14 是 M = 7 的两倍,即 14 = 2 * 7 。

示例 3:

输入:arr = [3,1,7,11]

输出:false

解释:在该情况下不存在 N 和 M 满足 N = 2 * M 。

提示:

2 <= arr.length <= 500

-10^3 <= arr[i] <= 10^3

解:

首先最直观的想到暴力法,时间复杂度是O(N^2)

bool

checkIfExist(

int

* arr,

int

arrSize){

int

i,j;

for

(i=

0

;i

for

(j=i+

1

;j

if

(arr[i]==arr[j]*

2

|| arr[j]==arr[i]*

2

)

return

true

;

}

return

false

;

}

对暴力法进行改进,很自然的想到使用哈希表以空间换时间的策略,通过判断哈希表对应位置上的索引关系,能够知道是否存在符合题意的一对数。

注意这里有2个细节:

1、数组可能包含数组,而使用数组实现哈希表,索引不能是负数,但是因为题目给出了数的范围,我们对这个区间统一加上1000,就可以保证索引的有效性。

2、0要单独处理,否则会因为0的存在导致错误的结果。

bool

checkIfExist(

int

* arr,

int

arrSize){

int

hashMap[

2001

] = {

0

};

int

countZero =

0

;

int

i;

for

(i=

0

;i

if

(arr[i]==

0

)   ++countZero;

if

(countZero>=

2

)

return

true

;

hashMap[

1000

+arr[i]] =

1

;

}

for

(i=

0

;i

if

(arr[i]!=

0

&& arr[i]%

2

==

0

&& hashMap[

1000

+arr[i]/

2

]==

1

)

return

true

;

return

false

;

}

c语言大数倍数,leetcode-1346(检查整数及其两倍数是否存在)--C语言实现相关推荐

  1. LeetCode 1346. 检查整数及其两倍数是否存在(哈希)

    1. 题目 给你一个整数数组 arr,请你检查是否存在两个整数 N 和 M,满足 N 是 M 的两倍(即,N = 2 * M). 更正式地,检查是否存在两个下标 i 和 j 满足: i != j 0 ...

  2. 1346. 检查整数及其两倍数是否存在

    1346. 检查整数及其两倍数是否存在https://leetcode.cn/problems/check-if-n-and-its-double-exist/ 难度简单55 给你一个整数数组 arr ...

  3. 1346. 检查整数及其两倍数是否存在 golang

    1346. 检查整数及其两倍数是否存在 1346. 检查整数及其两倍数是否存在 给你一个整数数组 arr,请你检查是否存在两个整数 N 和 M,满足 N 是 M 的两倍(即,N = 2 * M). 更 ...

  4. [leetcode周赛]1346. 检查整数及其两倍数是否存在

    class Solution {public:bool checkIfExist(vector<int>& arr) {sort(arr.begin(),arr.end());fo ...

  5. python怎么判断倍数_检查整数及其两倍数是否存在 python3

    1346. 检查整数及其两倍数是否存在 难度简单23收藏分享切换为英文关注反馈 给你一个整数数组 arr,请你检查是否存在两个整数 N 和 M,满足 N 是 M 的两倍(即,N = 2 * M). 更 ...

  6. LeetCode 1346、检查整数及其两倍数是否存在

    1346.检查整数及其两倍数是否存在 1)题目描述 给你一个整数数组 arr,请你检查是否存在两个整数 N 和 M,满足 N 是 M 的两倍(即,N = 2 * M). 更正式地,检查是否存在两个下标 ...

  7. Leetcode 1346:检查整数及其两倍数是否存在(超详细的解法!!!)

    给你一个整数数组 arr,请你检查是否存在两个整数 N 和 M,满足 N 是 M 的两倍(即,N = 2 * M). 更正式地,检查是否存在两个下标 i 和 j 满足: i != j 0 <= ...

  8. LeetCode简单题之检查整数及其两倍数是否存在

    题目 给你一个整数数组 arr,请你检查是否存在两个整数 N 和 M,满足 N 是 M 的两倍(即,N = 2 * M). 更正式地,检查是否存在两个下标 i 和 j 满足: i != j 0 < ...

  9. leetcode 第1题【两数之和】C语言

    leetcode 第1题[两数之和] 今天开始刷 leetcode 了,坚持每天做 因为不太会编程,只是想记录下来,若有错误,欢迎指正. /*** Note: The returned array m ...

最新文章

  1. C语言之头文件,static与const关键字
  2. [数据库] Navicat for Oracle基本用法图文介绍
  3. 【JS 逆向百例】网洛者反爬练习平台第一题:JS 混淆加密,反 Hook 操作
  4. Servlet超详解+流程图
  5. win7 mysql 未响应_求助啊 WIN7下安装mysql出问题 老是说未响应~!!
  6. dsp2812 pmsm foc之中断初始化
  7. PSF 点扩展函数 (from WikiPedia)
  8. 超低插损的新材料射频开关(PCM RF switch)的新进展
  9. 使用TensorFlow搭建智能开发系统,自动生成App UI代码
  10. 用html中表单标签实现QQ登录注册静态页面
  11. 机器人学笔记之——空间描述和变换:姿态的其他描述方法
  12. 在C语言aceg什么意思,#8203;给定关系模式R,U={A,B,C},F={AB-C,C-B}.关系R(1) ,且分别有(2)给定关系模式R,U={A,B,C},F={AB-C,C-B}...
  13. 有什么软件可以测试电脑的网速,电脑测网速软件哪个好 轻松测试网络性能
  14. 如何批量调整图片亮度和对比度?
  15. 地铁线路项目需求简要分析
  16. 亲测好用的视频后期合成软件:Nuke 13(完美支持12系统和m1)
  17. 在docker中编译tor 源码
  18. storm 实战及实例讲解(二)
  19. 基于图像的多视角立体视觉三维重建(一)——对极几何模型与极线校正原理
  20. Robust image stitching with multiple registrations之浅见

热门文章

  1. java值栈_Struts2 中的值栈是什么?
  2. C语言以字符串的形式读写文件
  3. 【OpenCV 例程200篇】100. 自适应局部降噪滤波器
  4. 后盾网php多少钱_商标转让做公证花多少钱-购店网
  5. html table设置行高_字号与行高
  6. 以VMware workstation15.5.2pro为例如何新建虚拟机,安装镜像文件(最新)
  7. Python档案袋( 命令行操作 及 Os与Shutil文件操作补充 )
  8. 前端通信:ajax设计方案(五)--- 集成promise规范,更优雅的书写代码(改迭代已作废,移步迭代10)...
  9. 大数据笔记11:MapReduce的运行流程
  10. web.config中httpRunTime的属性