Post

2274 Keep Multiplying Found Values By Two

2274 Keep Multiplying Found Values By Two

Keep Multiplying Found Values by Two image

You are given an array of integers nums. You are also given an integer original which is the first number that needs to be searched for in nums.

You then do the following steps:

1
2
3
If original is found in nums, **multiply** it by two (i.e., set original = 2 * original).
Otherwise, **stop** the process.
**Repeat** this process with the new number as long as you keep finding the number.

Return *the final value of *original.

 

Example 1:

1
2
3
4
5
6
7
8
9
**Input:** nums = [5,3,6,1,12], original = 3
**Output:** 24
**Explanation:** 
- 3 is found in nums. 3 is multiplied by 2 to obtain 6.
- 6 is found in nums. 6 is multiplied by 2 to obtain 12.
- 12 is found in nums. 12 is multiplied by 2 to obtain 24.
- 24 is not found in nums. Thus, 24 is returned.

Example 2:

1
2
3
4
5
6
**Input:** nums = [2,7,9], original = 4
**Output:** 4
**Explanation:**
- 4 is not found in nums. Thus, 4 is returned.

 

Constraints:

1
2
1 <= nums.length <= 1000
1 <= nums[i], original <= 1000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

use std::collections::HashMap;
impl Solution {
    pub fn find_final_value(nums: Vec<i32>, original: i32) -> i32 {
        let mut hs = HashMap::new();

        for k in nums {
            if !hs.contains_key(&k) {
                hs.insert(k,k);
            }
        }
        let mut orig = original;
        while (orig != -1) {
            if hs.contains_key(&orig) {
                orig = orig * 2;
            } else {
                return orig;
                orig = -1;
            }
        }
        return -1;

    }
}



This post is licensed under CC BY 4.0 by the author.