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;
mod arr;
impl Solution {
pub fn minimum_pair_removal(mut nums: Vec<i32>) -> i32 {
let mut all_clear = false;
let mut ans = -1;
while !all_clear{
ans += 1;
all_clear = true;
let (mut index_a, mut index_b)= (0,0);
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;
}
fn get_min(num: i32) -> i32 {
let mut chars: Vec<char> = vec![];
let mut write_in = false;
let mut one_count = 0;
for c in format!("{:b}", num).chars().rev() {
if write_in {
chars.push(c);
continue;
}
for i in start + 1..nums.len() {
if nums[i] == -10000001 {
continue;
if c == '0' {
if one_count == 0 {
return -1;
}
if nums[i] < nums[last] {
all_clear = false;
for _ in 0..one_count -1 {
chars.push('1');
}
if nums[last] + nums[i] < min_sum {
(index_a, index_b) = (last, i);
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;
nums[index_b] = -10000001;
one_count += 1;
}
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
}
pub fn min_bitwise_array(nums: Vec<i32>) -> Vec<i32> {
nums.into_iter().map(|x| Solution::get_min(x)).collect()
}
}
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);
}