3315. 构造最小位运算数组 II
This commit is contained in:
parent
7efe4d98bb
commit
873bf741e6
57
src/main.rs
57
src/main.rs
|
|
@ -1,42 +1,45 @@
|
||||||
struct Solution;
|
struct Solution;
|
||||||
mod arr;
|
mod arr;
|
||||||
impl Solution {
|
impl Solution {
|
||||||
pub fn minimum_pair_removal(mut nums: Vec<i32>) -> i32 {
|
fn get_min(num: i32) -> i32 {
|
||||||
let mut all_clear = false;
|
let mut chars: Vec<char> = vec![];
|
||||||
let mut ans = -1;
|
let mut write_in = false;
|
||||||
while !all_clear{
|
let mut one_count = 0;
|
||||||
ans += 1;
|
for c in format!("{:b}", num).chars().rev() {
|
||||||
all_clear = true;
|
if write_in {
|
||||||
let (mut index_a, mut index_b)= (0,0);
|
chars.push(c);
|
||||||
let mut min_sum = 1e9 as i32;
|
|
||||||
let mut start = 0;
|
|
||||||
let mut last = start;
|
|
||||||
for i in 0 .. nums.len() {
|
|
||||||
if nums[i] != -10000001 {
|
|
||||||
start = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for i in start + 1..nums.len() {
|
|
||||||
if nums[i] == -10000001 {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if nums[i] < nums[last] {
|
if c == '0' {
|
||||||
all_clear = false;
|
if one_count == 0 {
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
if nums[last] + nums[i] < min_sum {
|
for _ in 0..one_count -1 {
|
||||||
(index_a, index_b) = (last, i);
|
chars.push('1');
|
||||||
min_sum = nums[last] + nums[i];
|
|
||||||
}
|
}
|
||||||
last = i;
|
one_count = 0;
|
||||||
|
chars.push('0');
|
||||||
|
chars.push(c);
|
||||||
|
write_in = true;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
nums[index_a] = min_sum;
|
one_count += 1;
|
||||||
nums[index_b] = -10000001;
|
}
|
||||||
|
let mut ans = 0;
|
||||||
|
if one_count > 0 {
|
||||||
|
return num >> 1;
|
||||||
|
}
|
||||||
|
for c in chars.into_iter().rev() {
|
||||||
|
ans = ans * 2 + c as i32 - '0' as i32;
|
||||||
}
|
}
|
||||||
ans
|
ans
|
||||||
}
|
}
|
||||||
|
pub fn min_bitwise_array(nums: Vec<i32>) -> Vec<i32> {
|
||||||
|
nums.into_iter().map(|x| Solution::get_min(x)).collect()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let result = Solution::minimum_pair_removal(vec![498,107,626,-563,-760,554,-196,-158,185,-63]);
|
let result = Solution::min_bitwise_array(vec![11,13,31]);
|
||||||
println!("{:?}", result);
|
println!("{:?}", result);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue