Following is the Problem: Given an array arr of integers, check if there exists two integers N and M such that N is the double of M ( i.e. N = 2 * M).
More formally check if there exists two indices i and j such that :
i != j
0 <= i, j < arr.length
arr[i] == 2 * arr[j]
Example 1:
Input: arr = [10,2,5,3] Output: true Explanation: N = 10 is the double of M = 5,that is, 10 = 2 * 5. Example 2:
Input: arr = [7,1,14,11] Output: true Explanation: N = 14 is the double of M = 7,that is, 14 = 2 * 7. Example 3:
Input: arr = [3,1,7,11] Output: false Explanation: In this case does not exist N and M, such that N = 2 * M.
Constraints:
2 <= arr.length <= 500 -10^3 <= arr[i] <= 10^3
My Solution
class Solution {
public boolean checkIfExist(int[] arr) {
int [] arr2 = new int[arr.length];
boolean answer= false;
for (int i = 0; i < arr.length; i ) {
arr2[i]=2*arr[i];
}
for (int i = 0; i < arr.length; i ) {
for (int j = arr.length-1; j >= 0; j--) {
if((arr[i]) == arr2[j]){
answer=true;
break;
}
}
}
return answer;
}
}
When the input array is [-2,0,10,-19,4,6,-8] the test case fails, because of the 0 in the 2nd index is doubled but when there is a 0 in any place it should be ignored.
CodePudding user response:
adding arr[i] != 0 to your if statement will skip over any 0 Here is an example
var arr = [10, 4, 8, 5, 16, 0]
for(var i=0; i < arr.length; i ) {
for(var j=0; j < arr.length; j ){
if(arr[i] != 0 && arr[i] * 2 == arr[j])
console.log(arr[i], arr[j])
}
}
Hope that helps
CodePudding user response:
The corrected Solution is
class Solution {
public boolean checkIfExist(int[] arr) {
int [] arr2 = new int[arr.length];
boolean answer= false;
for (int i = 0; i < arr.length; i ) {
arr2[i]=2*arr[i];
}
for (int i = 0; i < arr.length; i ) {
for (int j = arr.length-1; j >= 0; j--) {
if(i == j){
continue;
} if(arr[i] == arr2[j]){
answer=true;
break;
}
}
}
return answer;
}
}