首页 > 其他分享 >1346. 检查整数及其两倍数是否存在

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

时间:2023-12-19 16:25:06浏览次数:34  
标签:arr return mid 整数 else 1346 num 倍数

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

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

二分

还算简单的二分,两个错点:
1.原数组无序,要先排(sort)
2.两个数下标不能相同(mid!=i)

1.向上取整

class Solution {
public:
    bool checkIfExist(vector<int>& arr) {
        sort(arr.begin(),arr.end());
        for(int i=0;i<arr.size();i++){
            int num=arr[i];
            int l=0,r=arr.size()-1;
            while(l<r){
                int mid=(l+r)>>1;
                if(arr[mid]*2==num&&mid!=i)return 1;
                else if(arr[mid]*2>num)r=mid;
                else l=mid+1;
            }
        }
        return 0;
    }
};

2.向下取整

class Solution {
public:
    bool checkIfExist(vector<int>& arr) {
        sort(arr.begin(),arr.end());
        for(int i=0;i<arr.size();i++){
            int num=arr[i];
            int l=0,r=arr.size()-1;
            while(l<r){
                int mid=(l+r+1)>>1;
                if(arr[mid]*2==num&&mid!=i)return 1;
                else if(arr[mid]*2>num)r=mid-1;
                else l=mid;
            }
        }
        return 0;
    }
};

标签:arr,return,mid,整数,else,1346,num,倍数
From: https://www.cnblogs.com/isomer/p/17914045.html

相关文章

  • 3力扣-罗马数字转整数
    力扣刷题,今天做这题,一开始就想到了使用字典来存储罗马数字,但是想不到怎么解决小的在左减,小的在右加,后面只好借助题解,看完题解顿时灵光乍现,但是题解里面有个num+dicts[s[i]]-2*last的一开始想不明白,后面画表就明白了。题目罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。例如,罗......
  • 机器学习项目精选 第一期:超完整数据科学资料合集
    大噶吼,不说废话,分享一波我最近看过并觉得非常硬核的资源,包括Python、机器学习、深度学习、大模型等等。1、超完整数据科学资料合集地址:https://github.com/krishnaik06/The-Grand-Complete-Data-Science-MaterialsPython数据分析和数据科学完整播放列表数据分析和数据科学的......
  • 两个整数的最大公因数
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intAB(inta,intb){ while(b!=0) { inttemp=a%b; a=b; b=temp; } returna;}intmain(){ inta,b; printf("请输入两个整数:>\n"); scanf("%d%d",&a,&......
  • P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题
    首先最大公因数和最小公倍数之积等于两个原数的积,这是基本性质然后两个数中,最小也是大于等于最大公因数,最大不超过最小公倍数最暴力的方法是,在这个范围内遍历其中一个数,积除以这个数得到另一个数,然后用辗转相除法进行判断就可以求解。当然,可以缩短范围。缩短范围有两个基本思想......
  • 2023-12-16:用go语言,给定整数数组arr,求删除任一元素后, 新数组中长度为k的子数组累加和
    2023-12-16:用go语言,给定整数数组arr,求删除任一元素后,新数组中长度为k的子数组累加和的最大值。来自字节。答案2023-12-16:来自左程云。灵捷3.5大体步骤如下:算法maxSum1分析:1.计算输入数组arr的长度n。2.如果n<=k,则返回0。3.初始化ans为int类型的最小值(math......
  • 2023-12-16:用go语言,给定整数数组arr,求删除任一元素后, 新数组中长度为k的子数组累加和
    2023-12-16:用go语言,给定整数数组arr,求删除任一元素后,新数组中长度为k的子数组累加和的最大值。来自字节。答案2023-12-16:来自左程云。灵捷3.5大体步骤如下:算法maxSum1分析:1.计算输入数组arr的长度n。2.如果n<=k,则返回0。3.初始化ans为int类型的最小值(math.MinInt32)......
  • 1387. 将整数按权重排序(递归 +记忆化+排序)
    Problem:1387.将整数按权重排序我们将整数x的权重定义为按照下述规则将x变成1所需要的步数:如果x是偶数,那么x=x/2如果x是奇数,那么x=3*x+1比方说,x=3的权重为7。因为3需要7步变成1(3-->10-->5-->16-->8-->4-->2-->1)。给你三个整数......
  • 求两数的最大公约数和最小公倍数的n种方法
    最大公约数:公约数,亦称“公因数”。它是指能同时整除几个整数的数。如果一个整数同时是几个整数的约数,称这个整数为它们的“公约数”;公约数中最大的称为最大公约数。对任意的若干个正整数,1总是它们的公因数。最小公倍数:两个或多个整数公有的倍数中,除0以外最小的一个公倍数。......
  • 求其最大公约数和最小公倍数,一行代码完成
    题目:输入两个正整数m和n,求其最大公约数和最小公倍数。求出最大公约数就行,最小公倍数用m*n除以最大公约数就行packagemyself;importjava.util.Scanner;/***@AutherQY*@Date2023/12/11*/publicclassSix{publicstaticvoidmain(String[]args){......
  • 蓝桥杯 寻找整数
    题目扩展中国剩余定理,将所有同余方程合并为一个设有\(x\equivr_1(mod\m_1)\),\(x\equivr_2(mod\m_2)\),即\(x=m_1p+r_1=m_2q+r2\)则有\(m_1p-m_2q=r_2-r_1\),由扩展欧几里得算法,得:方程\(m_1p-m_2q=gcd(m_1,m_2)\)特解\(p',q'\)对于原方程:当\((r2-r1)\%gcd(m_1,m_......