给你一个整数数组 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; } }
我就是记录一下自己写的,不过方法不好,有更好的方法可以去借鉴。