id 1422880127 Time: 20 ms MemUsage: 6.7 MB

This commit is contained in:
2024-10-22 10:19:42 +09:00
parent 7c29b8eae2
commit bdba092c00

View File

@@ -0,0 +1,45 @@
struct KthLargest {
k: usize,
nums: Vec<i32>
}
/**
* `&self` means the method takes an immutable reference.
* If you need a mutable reference, change it to `&mut self` instead.
*/
impl KthLargest {
fn new(k: i32, mut nums: Vec<i32>) -> Self {
let k = k as usize;
let length = nums.len();
let mut kths = vec![-10001i32; k];
nums.sort();
if length > k{
kths[0..].copy_from_slice(&nums[length-k..]);
} else if length != 0{
kths[k - length..].copy_from_slice(&nums[0..]);
}
Self{
k,
nums: kths
}
}
fn add(&mut self, val: i32) -> i32 {
let k = self.k;
match self.nums.binary_search(&val){
Ok(0) | Err(0) => (),
Ok(idx) | Err(idx) => {
self.nums.copy_within(1..idx, 0);
self.nums[idx - 1] = val;
}
}
self.nums[0]
}
}
/**
* Your KthLargest object will be instantiated and called as such:
* let obj = KthLargest::new(k, nums);
* let ret_1: i32 = obj.add(val);
*/