Contents

ARST打卡第319周

Algorithm

lc1432_改变一个整数能得到的最大差值

思路:

直接从左到右遍历,如果第一位是非1,非9,那么就向1,9获取最大最小值,

如果有1,9,那么再后一位遍历到非1,9的位,将数位替换成9或者0, 直到获取最大最小算差值即可。

 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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
impl Solution {
    pub fn max_diff(num: i32) -> i32 {
        let s = num.to_string();
        let chars: Vec<char> = s.chars().collect();
        let n = chars.len();
        
        // 计算最大值:找到第一个不是9的数字,将其替换为9
        let mut max_chars = chars.clone();
        for i in 0..n {
            if chars[i] != '9' {
                let target = chars[i];
                for j in i..n {
                    if max_chars[j] == target {
                        max_chars[j] = '9';
                    }
                }
                break;
            }
        }
        
        // 计算最小值:找到第一个可以替换的数字
        let mut min_chars = chars.clone();
        if chars[0] != '1' {
            // 第一位不是1,将第一位及所有相同的数字替换为1
            let target = chars[0];
            for j in 0..n {
                if min_chars[j] == target {
                    min_chars[j] = '1';
                }
            }
        } else {
            // 第一位是1,找到第一个不是0且不是1的数字,替换为0
            for i in 1..n {
                if chars[i] != '0' && chars[i] != '1' {
                    let target = chars[i];
                    for j in i..n {
                        if min_chars[j] == target {
                            min_chars[j] = '0';
                        }
                    }
                    break;
                }
            }
        }
        
        let max_val: i32 = max_chars.iter().collect::<String>().parse().unwrap();
        let min_val: i32 = min_chars.iter().collect::<String>().parse().unwrap();
        
        max_val - min_val
    }
}

Review

塑造你世界观的三种偏见【TED演讲】

扩充认知才能减少偏见。

Tips

小红书推广搜介绍

Share

chaos finance介绍