leetcode1346.检查整数及两倍数是否存在(c/c++/java)

Posted 程序彤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode1346.检查整数及两倍数是否存在(c/c++/java)相关的知识,希望对你有一定的参考价值。

c

借助temp,提前将数组中偶数找到除2,直接查是否有相同。(注意指针不能相撞,0的条件)

//
// Created by 李威彤 on 2022/2/22.
//

#include <stdio.h>
#include <stdbool.h>

bool checkIfExist(int* arr, int arrSize)
    int i=0,j,temp;
    for ( i = 0; i < arrSize; ++i) 
        if (arr[i]%2==0)
            temp = arr[i]/2;
            for ( j = 0; j < arrSize; ++j) 
                if (temp==arr[j]&&i!=j)
                    return true;
                
            
        
    
    return false;


c++

只要找到数组中乘2后和定位数相同的数,即返回真。(注意指针不能相撞)

#include <iostream>
#include <vector>

using namespace std;

class Solution 
public:
    bool checkIfExist(vector<int> &arr) 
        for (auto i = arr.begin(); i != arr.end(); ++i) 
            for (auto j = arr.begin(); i != arr.end(); j++) 
                if (i !=j && *i == *j*2)
                    return true;
                

            

        
        return false;
    
;

Java

法一:双层for循环暴力求解。
法二:利用hashmap,k存当前值,v存当前值所对应下标。注意从小到大和从大到小的情况均需考虑,eg:5,3,10和10,3,5,分两种情况判断,最终均需put到map中。

package 数组;

import java.util.HashMap;

public class 检查满足两倍数 
    public static void main(String[] args) 

    
	// 法1
    public boolean checkIfExist1(int[] arr) 
        for (int i = 0; i < arr.length; i++) 
            for (int j = 0; j < arr.length; j++) 
                if (arr[i] == arr[j] * 2 && i != j) 
                    return true;
                
            
        
        return false;
    
	// 法2
    public boolean checkIfExist(int[] arr) 
        HashMap<Integer, Integer> hashMap = new HashMap<>();
        for (int i = 0; i < arr.length; i++) 
            if (hashMap.containsKey(arr[i] * 2) && hashMap.get(arr[i] * 2) != i) 
                return true;
            
            if (arr[i]%2==0 && hashMap.containsKey(arr[i] / 2) && hashMap.get(arr[i] / 2) != i) // 不能出现小数,需设取整条件
                return true;
            
            hashMap.put(arr[i], i); // v值为下标,为了防止0情况出现
        
        return false;
    


以上是关于leetcode1346.检查整数及两倍数是否存在(c/c++/java)的主要内容,如果未能解决你的问题,请参考以下文章

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

⭐算法入门⭐《二分枚举》简单04 —— LeetCode 1346. 检查整数及其两倍数是否存在

Leetcode 175场周赛

Leetcode 第175场周赛 题解(完结)

leetcode No.523 连续的子数组和 java

tyvjP1346 MMT数