diff --git a/src/main.rs b/src/main.rs index 8f2863c..778f4c9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,42 +1,45 @@ struct Solution; mod arr; impl Solution { - pub fn minimum_pair_removal(mut nums: Vec) -> 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 = 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) -> Vec { + 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); }