给你一个整数数组 arr,请你检查是否存在两个整数 N 和 M,满足 N 是 M 的两倍(即,N = 2 * M)。
更正式地,检查是否存在两个下标 i 和 j 满足:
i != j
0 <= i, j < arr.length
arr[i] == 2 * arr[j]
class Solution {
public boolean checkIfExist(int[] arr) {
int len = arr.length;
List<Integer> Flist = new ArrayList<Integer>();
List<Integer> Zlist = new ArrayList<Integer>();
int i = 0;
while(i < len)
{
if(arr[i] < 0)
{
Flist.add(-arr[i]);
}
else
{
Zlist.add(arr[i]);
}
i++;
}
int[] FArr = new int [Flist.size()]; //存储小于零的数组;
int[] ZArr = new int [Zlist.size()]; //存储大于零的数组;
for(int a = 0; a < Flist.size(); a++)
{
FArr[a] = Flist.get(a);
}
for(int b = 0; b < Zlist.size(); b++)
{
ZArr[b] = Zlist.get(b);
}
Arrays.sort(FArr);
Arrays.sort(ZArr);
// return Panduan(FArr);
if(!Panduan(ZArr) && !Panduan(FArr))
return false;
else
return true;
}
public boolean Panduan(int[] arr)
{
boolean flag = true, returnFlag = false;
int i = 0 , len = arr.length;
if(arr.length > 1)
{
while(flag)
{
int tmpNum = arr[i] * 2;
if(tmpNum > arr[len-1])
{
flag = false;
}
for(int j = len-1; j > i; j--)
{
if(tmpNum > arr[j])
{
break;
}
if(tmpNum == arr[j])
{
returnFlag = true;
flag = false;
break;
}
}
i++;
}
return returnFlag;
}
else
return false;
}
}
我就是记录一下自己写的,不过方法不好,有更好的方法可以去借鉴。