Open carloscn opened 1 year ago
既然是排序,我们就按照冒泡排序的模板进行,循环和排序,接着判断排序的规则需要重新开发,is_swap(a, b, rule)
来判断。
fn is_swap(a:i32, b:i32, rule:&Vec<i32>) -> bool
{
if rule.len() < 1 || a == b {
return false;
}
let a_pos = rule.iter().position(|&x| x == a);
let b_pos = rule.iter().position(|&x| x == b);
if a_pos == None && b_pos != None {
return true;
} else if a_pos != None && b_pos == None {
return false;
} else if a_pos != None && b_pos != None {
return a_pos > b_pos;
}
return a > b;
}
pub fn relative_sort_array(arr1: Vec<i32>, arr2: Vec<i32>) -> Vec<i32>
{
let mut ret_vec:Vec<i32> = vec![];
if arr1.len() < 1 ||
arr2.len() < 2 ||
arr1.len() < arr2.len() {
return ret_vec;
}
if arr1.len() == 1 {
ret_vec.push(arr1[0]);
return ret_vec;
}
ret_vec.append(&mut arr1.clone());
for i in 0..(arr1.len() - 1) {
for j in 0..(arr1.len() - 1 - i) {
if is_swap(ret_vec[j], ret_vec[j + 1], &arr2) {
let temp = ret_vec[j + 1];
ret_vec[j + 1] = ret_vec[j];
ret_vec[j] = temp;
}
}
}
return ret_vec;
}
问题描述
给你两个数组,arr1 和 arr2,arr2 中的元素各不相同,arr2 中的每个元素都出现在 arr1 中。
对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。
示例 1:
输入:arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6] 输出:[2,2,2,1,4,3,3,9,6,7,19]
示例 2:
输入:arr1 = [28,6,22,8,44,17], arr2 = [22,28,8,6] 输出:[22,28,8,6,17,44]
提示:
1 <= arr1.length, arr2.length <= 1000 0 <= arr1[i], arr2[i] <= 1000 arr2 中的元素 arr2[i] 各不相同 arr2 中的每个元素 arr2[i] 都出现在 arr1 中
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/relative-sort-array