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;
}
}