oppgaver så langt
This commit is contained in:
parent
4f3385850f
commit
df84d4f18e
17 changed files with 628 additions and 0 deletions
6
merge-sorted-array-88/Cargo.toml
Normal file
6
merge-sorted-array-88/Cargo.toml
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
[package]
|
||||
name = "merge-sorted-array-88"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
83
merge-sorted-array-88/src/main.rs
Normal file
83
merge-sorted-array-88/src/main.rs
Normal 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)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue