oppgaver så langt

This commit is contained in:
Håkon Størdal 2025-03-22 13:49:25 +01:00
parent 4f3385850f
commit df84d4f18e
17 changed files with 628 additions and 0 deletions

View file

@ -0,0 +1,6 @@
[package]
name = "merge-sorted-array-88"
version = "0.1.0"
edition = "2024"
[dependencies]

View file

@ -0,0 +1,83 @@
pub fn merge_hacky(nums1: &mut Vec<i32>, m: i32, nums2: &mut Vec<i32>, n: i32) {
if n == 0 {
return;
}
if m == 0 {
*nums1 = nums2.clone();
return;
}
let mut num1_counter = (m - 1) as usize;
let mut num2_counter = (n - 1) as usize;
let while_bool = true;
// Iterate nums1 from len - n (which is 3) backwards
while while_bool {
let num1 = nums1[num1_counter];
let num2 = nums2[num2_counter];
if num1 < num2 {
nums1[num1_counter + num2_counter + 1] = num2;
if num2_counter == 0 {
break;
}
num2_counter -= 1;
} else if num1 > num2 {
nums1[num1_counter + num2_counter + 1] = num1;
if num1_counter == 0 {
nums1[..num2_counter + 1].copy_from_slice(&nums2[..num2_counter + 1]);
break;
}
num1_counter -= 1
} else {
nums1[num1_counter + num2_counter] = num2;
nums1[num1_counter + num2_counter + 1] = num1;
if num2_counter == 0 {
break;
}
num2_counter -= 1;
if num1_counter == 0 {
nums1[..num2_counter + 1].copy_from_slice(&nums2[..num2_counter + 1]);
break;
}
num1_counter -= 1
}
}
}
pub fn merge(nums1: &mut Vec<i32>, m: i32, nums2: &mut Vec<i32>, n: i32) {
let mut i = (m - 1) as usize;
let mut j = (n - 1) as usize;
let mut k = (m + n - 1) as usize;
while let Some(_) = nums1.get(k) {
if j == usize::MAX {
return;
}
if i == usize::MAX {
nums1[..=j].copy_from_slice(&nums2[..=j]);
return;
}
if nums1[i] < nums2[j] {
nums1[k] = nums2[j];
j = j.wrapping_sub(1);
} else {
nums1[k] = nums1[i];
i = i.wrapping_sub(1);
}
k = k.wrapping_sub(1);
}
}
fn main() {
let mut nums1 = vec![2, 0];
let m = 1;
let mut nums2 = vec![1];
let n = 1;
println!("{:?}", merge(&mut nums1, m, &mut nums2, n));
println!("{:?}", nums1)
}