1536. 排布二进制网格的最少交换次数
This commit is contained in:
parent
495075eef2
commit
1772ba6c99
58
src/main.rs
58
src/main.rs
|
|
@ -1,26 +1,50 @@
|
||||||
use std::cmp::Ordering;
|
|
||||||
|
|
||||||
struct Solution;
|
struct Solution;
|
||||||
mod arr;
|
mod arr;
|
||||||
|
|
||||||
impl Solution {
|
impl Solution {
|
||||||
pub fn sort_by_bits(arr: Vec<i32>) -> Vec<i32> {
|
pub fn min_swaps(grid: Vec<Vec<i32>>) -> i32 {
|
||||||
let mut arr= arr.iter().map(|&x| ->(i32,i32){
|
fn count_tail_zero(arr: &Vec<i32>) -> i32 {
|
||||||
(x,x.count_ones() as i32)
|
let mut cnt = 0;
|
||||||
}).collect::<Vec<(i32,i32)>>();
|
for i in (0..arr.len()).rev() {
|
||||||
arr.sort_unstable_by(|a,b|-> Ordering {
|
if arr[i] == 0 {
|
||||||
let res = a.1.cmp(&b.1);
|
cnt += 1;
|
||||||
match res {
|
} else {
|
||||||
Ordering::Equal => a.0.cmp(&b.0),
|
return cnt;
|
||||||
_ => res,
|
|
||||||
}
|
|
||||||
});
|
|
||||||
arr.iter().map(|&(x,_)| x).collect()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
cnt
|
||||||
|
}
|
||||||
|
let mut arr = Vec::<i32>::with_capacity(grid.len());
|
||||||
|
for i in 0..grid[0].len() {
|
||||||
|
arr.push(count_tail_zero(&grid[i]))
|
||||||
|
}
|
||||||
|
let mut cnt = 0;
|
||||||
|
for i in (0..grid.len()).rev() {
|
||||||
|
let mut index = 0;
|
||||||
|
let mut cant = true;
|
||||||
|
for j in 0..arr.len() {
|
||||||
|
if arr[j] == -1 {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if arr[j] >= i as i32 {
|
||||||
|
arr[j] = -1;
|
||||||
|
cnt += index;
|
||||||
|
cant = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
index += 1;
|
||||||
|
}
|
||||||
|
if cant{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cnt
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let result = Solution::sort_by_bits(
|
let result = Solution::min_swaps(arr::make_matrix(
|
||||||
vec![0,1,2,3,4,5,6,7,8]
|
"[[0,0,1],[1,1,0],[1,0,0]]",
|
||||||
);
|
));
|
||||||
println!("{:?}", result);
|
println!("{:?}", result);
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue