3315. 构造最小位运算数组 II

This commit is contained in:
li_chx 2026-01-22 15:20:15 +08:00
parent 7efe4d98bb
commit 873bf741e6
Signed by: li_chx
GPG Key ID: 70D4985BB8180E92
1 changed files with 31 additions and 28 deletions

View File

@ -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);
} }