From 807ce27309d0ac597dbcf76f8da3bf7771f4c7b5 Mon Sep 17 00:00:00 2001 From: Gleb Koval Date: Sun, 12 Jun 2022 14:07:59 +0100 Subject: [PATCH] search-insert-position --- search-insert-position/sol.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 search-insert-position/sol.rs diff --git a/search-insert-position/sol.rs b/search-insert-position/sol.rs new file mode 100644 index 0000000..fba577b --- /dev/null +++ b/search-insert-position/sol.rs @@ -0,0 +1,24 @@ +use std::cmp::Ordering; + +impl Solution { + pub fn search_insert(nums: Vec, target: i32) -> i32 { + // nums.len() > 0 so this is safe to do + if *nums.first().unwrap_or(&-target) == target { + return 0; + } + let mut current = nums.as_slice(); + let mut idx = 0; + while current.len() > 1 { + let m = current.len() / 2; + match target.cmp(¤t[m]) { + Ordering::Equal => return (idx + m) as i32, + Ordering::Greater => { + current = current.split_at(m).1; + idx += m; + }, + Ordering::Less => current = current.split_at(m).0 + } + } + (idx + if current[0] < target { 1 } else { 0 }) as i32 + } +} \ No newline at end of file