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. 检查整数及其两倍数是否存在