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;
|
||||
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;
|
||||
}
|
||||
}
|
||||
for i in start + 1..nums.len() {
|
||||
if nums[i] == -10000001 {
|
||||
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;
|
||||
}
|
||||
if nums[i] < nums[last] {
|
||||
all_clear = false;
|
||||
if c == '0' {
|
||||
if one_count == 0 {
|
||||
return -1;
|
||||
}
|
||||
if nums[last] + nums[i] < min_sum {
|
||||
(index_a, index_b) = (last, i);
|
||||
min_sum = nums[last] + nums[i];
|
||||
for _ in 0..one_count -1 {
|
||||
chars.push('1');
|
||||
}
|
||||
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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue