赞
踩
match c{
'f' => nums.push(0),
't' => nums.push(1),
'(' => nums.push(-1),
_ => (), // 注意,必须写未匹配的部分,否则会报错。
}
栈
这个玩意,但是好在我们可以用Vec或者VecDeque模拟。let mut vec = Vec::new(); // 创建一个无类型的vec,当第一次push后类型才会被推断出来,因此直接print会报错 let mut vec = vec![1,2,3]; // 创建一个i32的vec:[1,2,3] let mut vec = vec![1;5]; // 创建一个长度为5的i32的vec:[1,1,1,1,1] // vec还可以从各种集合类型里转换而来 assert_eq!(Vec::from([1, 2, 3]), vec![1, 2, 3]); // "vec_from_array", since = "1.44.0" assert_eq!(Vec::from(&[1, 2, 3][..]), vec![1, 2, 3]); // "rust1", since = "1.0.0" let o: Cow<[i32]> = Cow::Owned(vec![1, 2, 3]); let b: Cow<[i32]> = Cow::Borrowed(&[1, 2, 3]); assert_eq!(Vec::from(o), Vec::from(b)); // "vec_from_cow_slice", since = "1.14.0" assert_eq!(Vec::from("123"), vec![b'1', b'2', b'3']); // "rust1", since = "1.0.0") let b: Box<[i32]> = vec![1, 2, 3].into_boxed_slice(); assert_eq!(Vec::from(b), vec![1, 2, 3]); // "vec_from_box", since = "1.18.0" assert_eq!(Vec::from(&mut [1, 2, 3][..]), vec![1, 2, 3]); // "vec_from_mut", since = "1.19.0")
let mut vec1 = vec![1,2,3]; // 创建一个i32的vec:[1,2,3]
vec1.push(4); // [1,2,3,4]
vec1.pop(); // [1,2,3]
let mut vec2 = Vec::from(vec1.clone()); // [1, 2, 3] 注意如果不clone会使vec1失效
// vec1.extend(vec2); // vec1:[1, 2, 3, 1, 2, 3] ,注意 本操作会导致vec2失效.since = "1.6.0"
// vec1.append(&mut vec2); // vec1:[1, 2, 3, 1, 2, 3] vec2:[];注意实参&mut,会把vec2的所有数据倒进vec1。内部调用了一个append)elements方法。 since = "1.4.0"
这个操作很明显是O(n)的,慎用。
let mut vec1 = vec![1,2,3]; // 创建一个i32的vec:[1,2,3]
vec1.insert(1,5); // [1, 5, 2, 3]
// 在尾部删除 pop/split_off
let mut vec1 = vec![1,2,3]; // 创建一个i32的vec:[1,2,3]
let p = vec1.pop(); // vec1:[1, 2], p = Some(3)
let p = vec1.pop().unwrap(); // vec1:[1], p = 2
let mut vec1 = vec![1,2,3]; // 创建一个i32的vec:[1,2,3]
let vec2 = vec1.split_off(1); // vec1:[1] vec2:[2,3],从下标1把vec1切开,返回尾巴
// 在任意位置删除 remove/swap_remove
let mut vec1 = vec![1,2,3,4]; // 创建一个i32的vec:[1,2,3,4]
let p = vec1.remove(1); // 删除下标1的元素:vec:[1,3,4],p=2
let p = vec1.swap_remove(0); // 删除下标0的元素且用4替换这个位置:vec:[4,3],p=1
impl Solution { pub fn parse_bool_expr(expression: String) -> bool { let mut nums = vec![0;0]; // 数字栈 let mut ops:Vec<char> = vec![]; // 运算符栈 for c in expression.chars(){ match c{ 'f' => nums.push(0), 't' => nums.push(1), '(' => nums.push(-1), '&'|'|'|'!' => {ops.push(c)}, ')' =>{ // let op = ops.pop().unwrap(); match ops.pop().unwrap() { '!'=> { let p = nums.pop().unwrap(); nums.pop(); nums.push(p^1); }, '&'=>{ let mut p = 1; let ans = loop{ let top = nums.pop().unwrap(); if top == -1{ break p; } p &= top; }; nums.push(ans); }, '|' => { let mut p = 0; let ans = loop{ let top = nums.pop().unwrap(); if top == -1{ break p ; } p |= top; }; nums.push(ans); }, _ =>(), } }, _ => (), } } return nums[0] == 1; } }
use std::collections::*; use rand::Rng; struct RandomizedCollection { d: HashMap<i32,HashSet<usize>>, v: Vec<i32>, } /** * `&self` means the method takes an immutable reference. * If you need a mutable reference, change it to `&mut self` instead. */ impl RandomizedCollection { fn new() -> Self { Self{ d:HashMap::new(), v:Vec::new(), } } fn insert(&mut self, val: i32) -> bool { self.v.push(val); // 插入 if !self.d.contains_key(&val) { self.d.insert(val,HashSet::new()); } let mut p = self.d.get_mut(&val).unwrap(); p.insert(self.v.len()-1); // println!("{:?}",p); p.len() == 1 } fn remove(&mut self, val: i32) -> bool { if !self.d.contains_key(&val){ return false; } let mut p = self.d.get_mut(&val).unwrap(); if p.len() == 0 { return false; } let &pos = p.iter().next().unwrap(); p.remove(&pos); // 如果是最后一个,直接移除即可 if pos == self.v.len()-1{ self.v.pop(); } else { // 否则要把最后一个值的下标修改一下 let v = self.v.last().unwrap(); let mut pp = self.d.get_mut(&v).unwrap(); pp.remove(&(self.v.len()-1)); pp.insert(pos); self.v.swap_remove(pos); } return true; } fn get_random(&self) -> i32 { return self.v[rand::thread_rng().gen_range(0, self.v.len())] } } /** * Your RandomizedCollection object will be instantiated and called as such: * let obj = RandomizedCollection::new(); * let ret_1: bool = obj.insert(val); * let ret_2: bool = obj.remove(val); * let ret_3: i32 = obj.get_random(); */
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。