跳到主要内容

1464.数组中两元素的最大乘积

链接:1464.数组中两元素的最大乘积
难度:Easy
标签:数组、排序、堆(优先队列)
简介:给你一个整数数组 nums,请你选择数组的两个不同下标 i 和 j,使 (nums[i]-1)*(nums[j]-1) 取得最大值。

题解 1 - rust

  • 编辑时间:2022-08-27
  • 内存消耗:2.5MB
  • 编程语言:rust
  • 解法介绍:层序遍历。
use std::cell::RefCell;
use std::collections::VecDeque;
use std::rc::Rc;
impl Solution {
pub fn width_of_binary_tree(root: Option<Rc<RefCell<TreeNode>>>) -> i32 {
let root = root.unwrap();
let mut q = VecDeque::<(i32, Rc<RefCell<TreeNode>>)>::new();
q.push_back((0, root.clone()));
let mut ans = 1_i32;
let mut size = 1;
while !q.is_empty() {
let (idx, node) = q.pop_front().unwrap();
if node.as_ref().borrow().left.is_some() {
q.push_back((
idx * 2 + 1,
node.as_ref().borrow().left.as_ref().unwrap().clone(),
));
}
if node.as_ref().borrow().right.is_some() {
q.push_back((
idx * 2 + 2,
node.as_ref().borrow().right.as_ref().unwrap().clone(),
));
}
size -= 1;
if size == 0 {
size = q.len();
if !q.is_empty() {
ans = ans.max(q.back().unwrap().0 - q.front().unwrap().0 + 1);
}
}
}
ans
}
}