You are given an array nums consisting of n prime integers.
You need to construct an array ans of length n, such that, for each index i, the bitwise OR of ans[i] and ans[i] + 1 is equal to nums[i], i.e. ans[i] OR (ans[i] + 1) == nums[i].
Additionally, you must minimize each value of ans[i] in the resulting array.
If it is not possible to find such a value for ans[i] that satisfies the condition , then set ans[i] = -1.
Input: nums =[2,3,5,7]Output: [-1,1,4,3]Explanation:
* For `i = 0`, as there is no value for`ans[0]` that satisfies `ans[0] OR (ans[0] + 1) = 2`, so `ans[0] = -1`.* For `i = 1`, the smallest `ans[1]` that satisfies `ans[1] OR (ans[1] + 1) = 3`is`1`, because `1 OR (1 + 1) = 3`.* For `i = 2`, the smallest `ans[2]` that satisfies `ans[2] OR (ans[2] + 1) = 5`is`4`, because `4 OR (4 + 1) = 5`.* For `i = 3`, the smallest `ans[3]` that satisfies `ans[3] OR (ans[3] + 1) = 7`is`3`, because `3 OR (3 + 1) = 7`.
Input: nums =[11,13,31]Output: [9,12,15]Explanation:
* For `i = 0`, the smallest `ans[0]` that satisfies `ans[0] OR (ans[0] + 1) = 11`is`9`, because `9 OR (9 + 1) = 11`.* For `i = 1`, the smallest `ans[1]` that satisfies `ans[1] OR (ans[1] + 1) = 13`is`12`, because `12 OR (12 + 1) = 13`.* For `i = 2`, the smallest `ans[2]` that satisfies `ans[2] OR (ans[2] + 1) = 31`is`15`, because `15 OR (15 + 1) = 31`.
For each prime number nums[i], we want to find the smallest integer ans[i] such that ans[i] | (ans[i] + 1) == nums[i]. Since nums[i] is prime, its binary representation is a sequence of 1s followed by 0s. The minimal ans[i] is the largest even number less than nums[i] such that ans[i] | (ans[i] + 1) == nums[i].
classSolution {
public: vector<int> constructArray(vector<int>& nums) {
vector<int> ans;
for (int x : nums) {
int a =-1;
if (x ==2) a =-1;
elseif ((x -1| x) == x) a = x -1;
elseif ((x | (x -1)) == x) a = x -2;
ans.push_back(a);
}
return ans;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
funcConstructArray(nums []int) []int {
ans:= make([]int, len(nums))
fori, x:=rangenums {
a:=-1ifx==2 {
a = -1 } elseif (x-1)|x==x {
a = x-1 } elseifx|(x-1) ==x {
a = x-2 }
ans[i] = a }
returnans}
1
2
3
4
5
6
7
8
9
10
11
12
13
classSolution {
publicint[]constructArray(int[] nums) {
int[] ans =newint[nums.length];
for (int i = 0; i < nums.length; i++) {
int x = nums[i], a =-1;
if (x == 2) a =-1;
elseif ((x - 1 | x) == x) a = x - 1;
elseif ((x | (x - 1)) == x) a = x - 2;
ans[i]= a;
}
return ans;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
classSolution {
funconstructArray(nums: IntArray): IntArray {
return nums.map { x ->when {
x ==2-> -1 (x - 1 or x) == x -> x - 1 (x or (x - 1)) == x -> x - 2else-> -1 }
}.toIntArray()
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
classSolution:
defconstructArray(self, nums: list[int]) -> list[int]:
ans = []
for x in nums:
a =-1if x ==2:
a =-1elif (x -1| x) == x:
a = x -1elif (x | (x -1)) == x:
a = x -2 ans.append(a)
return ans
1
2
3
4
5
6
7
8
9
10
impl Solution {
pubfnconstruct_array(nums: Vec<i32>) -> Vec<i32> {
nums.into_iter().map(|x| {
if x ==2 { -1 }
elseif (x -1| x) == x { x -1 }
elseif (x | (x -1)) == x { x -2 }
else { -1 }
}).collect()
}
}
1
2
3
4
5
6
7
8
9
10
classSolution {
constructArray(nums: number[]):number[] {
returnnums.map(x=> {
if (x===2) return-1;
if ((x-1|x) ===x) returnx-1;
if ((x| (x-1)) ===x) returnx-2;
return-1;
});
}
}