/* * @lc app=leetcode id=852 lang=rust * * [852] Peak Index in a Mountain Array * * https://leetcode.com/problems/peak-index-in-a-mountain-array/description/ * * algorithms * Easy (70.89%) * Total Accepted: 129.3K * Total Submissions: 182.3K * Testcase Example: '[0,1,0]' * * Let's call an array A a mountain if the following properties hold: * * * A.length >= 3 * There exists some 0 < i < A.length - 1 such that A[0] < A[1] < ... A[i-1] < * A[i] > A[i+1] > ... > A[A.length - 1] * * * Given an array that is definitely a mountain, return any i such that A[0] < * A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1]. * * Example 1: * * * Input: [0,1,0] * Output: 1 * * * * Example 2: * * * Input: [0,2,1,0] * Output: 1 * * * Note: * * * 3 <= A.length <= 10000 * 0 <= A[i] <= 10^6 * A is a mountain, as defined above. * * */ impl Solution { pub fn peak_index_in_mountain_array(a: Vec) -> i32 { let (mut low, mut high) = (0, a.len() - 1) ; let mut mid; while low < high { mid = (low + high) / 2; // println!("{:?}", (low, mid, high)); if a[mid] < a[mid + 1] { low = mid + 1; } else { high = mid; } } low as i32 } } // pub structSolution; use std::collections::HashMap; use std::collections::HashSet; use std::fmt::Debug; use std::hash::Hash; use std::iter::FromIterator; #[allow(dead_code)] pub fn print_map(map: &HashMap) { for (k, v) in map.iter() { println!("{:?}: {:?}", k, v); } } #[allow(dead_code)] pub fn say_vec(nums: Vec){ println!("{:?}", nums); } #[allow(dead_code)] pub fn char_frequency(s: String) -> HashMap { let mut res:HashMap = HashMap::new(); for c in s.chars(){ *res.entry(c).or_insert(0) += 1; } res } #[allow(dead_code)] pub fn vec_counter(arr: Vec) -> HashMap { let mut c = HashMap::new(); for n in arr { *c.entry(n).or_insert(0) += 1; } c } #[allow(dead_code)] pub fn vec_to_hashset(arr: Vec) -> HashSet { HashSet::from_iter(arr.iter().cloned()) }