Contents

ARST打卡第295周

lc1366_通过投票对团队排名 人类如何抵达其他星球?【TED演讲】 别把当下当成本 分享香香矿RateX

Algorithm

lc1366_通过投票对团队排名

思路:

直接对n个位置的字符数进行计数,然后再遍历n个位置的计数最大者,只有超过才更新,则就能票数相同时按字母序。

这里一开始想简单了,并没有考虑清楚并列的依赖关系。

因为只有26个队伍,可以考虑26进制,每次乘以26. 最大是26^26,不太行。

那只能模拟了。找到最大票数,如果相同,就反复比较后面的票数。

并且后面已经排名的字母需要跳过。

 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
52
53
impl Solution {
    pub fn rank_teams(votes: Vec<String>) -> String {
        // votes.len() 是投票人数,但我们需要的是每个位置的字符数,应该用 votes[0].len()
        let n = votes[0].len();
        // dp[i][j] 表示第i个位置字符j(A-Z)的得票数
        let mut dp = vec![vec![0; 26]; n];
        for vote in votes {
            for (i, c) in vote.chars().enumerate() {
                dp[i][c as usize - 'A' as usize] += 1;
            }
        }
        let mut ans = String::with_capacity(n);
        let mut used = vec![false; 26];
        for _ in 0..n {
            let mut max_char = 'A';
            let mut found = false;
            // 遍历所有未使用的字母
            for j in 0..26 {
                if used[j] {
                    continue;
                }
                if !found {
                    // 找到第一个未使用的字母,直接continue是为了有2个字母比较, 或者最后一个字母直接用
                    max_char = (j as u8 + b'A') as char;
                    found = true;
                    continue;
                }
                // 比较当前字母j和当前最大字母的所有位置得票
                let mut is_larger = false;
                let mut is_equal = true;
                for pos in 0..n {
                    let curr = dp[pos][j];
                    let max = dp[pos][max_char as usize - 'A' as usize];
                    if curr > max {
                        is_larger = true;
                        is_equal = false;
                        break;
                    }
                    if curr < max {
                        is_equal = false;
                        break;
                    }
                }
                if is_larger || (is_equal && j < (max_char as usize - 'A' as usize)) {
                    max_char = (j as u8 + b'A') as char;
                }
            }
            used[max_char as usize - 'A' as usize] = true;
            ans.push(max_char);
        }
        ans
    }
}

题解直接先字母,再记录各位置的票数,然后排序。就不用考虑字符用过没的问题了,这种模拟的方式更好,学习。

不过提交运行起来,好像平台显示第一种方法更快,可能数据集没卡我的方法。

 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
use std::collections::HashMap;

impl Solution {
    pub fn rank_teams(votes: Vec<String>) -> String {
        let n = votes.len();
        // 初始化哈希映射
        let mut ranking: HashMap<char, Vec<i32>> = HashMap::new();
        for vid in votes[0].chars() {
            ranking.entry(vid).or_insert(vec![0; votes[0].len()]);
        }
        // 遍历统计
        for vote in votes {
            for (i, c) in vote.chars().enumerate() {
                if let Some(rank) = ranking.get_mut(&c) {
                    rank[i] += 1;
                }
            }
        }
        // 取出所有的键值对
        let mut result: Vec<(char, Vec<i32>)> = ranking.into_iter().collect();
        // 排序
        result.sort_by(|a, b| {
            for i in 0..a.1.len() {
                if a.1[i] != b.1[i] {
                    return b.1[i].cmp(&a.1[i]);
                }
            }
            a.0.cmp(&b.0)
        });

        // 构建结果字符串
        let mut ans = String::new();
        for (vid, _) in result {
            ans.push(vid);
        }
        ans
    }
}
// 链接:https://leetcode.cn/problems/rank-teams-by-votes/solutions/123922/tong-guo-tou-piao-dui-tuan-dui-pai-ming-by-leetcod/

Review

人类如何抵达其他星球?【TED演讲】

通过激光反射推进技术,有可能实现离开太阳系。To the space!

Tip-别把当下当成本

虽然新奇的体验能扩展人生的体验,这没有错,但是如果把这件事做到极端,就会把当下当成未来的成本,然后会讨厌当下,这不好。

所以最终还得是为而不争的斯多葛主义哲学:

杨绛曾说:“我们曾如此渴望命运的波澜,到最后才发现,人生最曼妙的风景,竟是内心的淡定与从容。”

日复一日的生活是如此单调枯燥,避免不了一颗浮躁的心起起落落。可是再怎么折腾,到头来都要归于沉寂。倒不如安安静静地洗一个澡,看一朵花,吃一顿饭,读一本书,来的更快活。

当然这一切并非是快活的本身,而是源泉。它们之所以是快活的源泉,主要还是因为我们的内心没有挂碍。也就是杨绛所说的内心淡定与从容。

每当我可以气定神闲的感受身边的一切时,我都认为那是多么稀有的幸福时刻。在这种时刻,若不能用文字抒发一下,实在是太憋屈了。

正如周国平所说:最高级的幸福,是生命单纯,精神优秀。

我想,这正是那些内心淡定与从容面对生活的人们所期待与追求的样子。

我们也一样……

也就是说,做自己想做的事情,能有幸体验不同的风景当然更好,但是如果最终不幸无法体验,也莫向外求,感受当下的平和。

这是内心的心法,会让自己更平和,更愿意享受当下。不会把任何时候都当成未来的成本。

没有当下是成本的想法,也就不会对未来有过分期望,也就不会失望,从而就能更平和的面对当下。正向飞轮。

而且自从认清楚自己只要做自己想做的事情,就能认真做,就能做到超过80%的人,就不会饿死。所以就能自信面对所有的权威,领导,就能有勇气和自信直视任何人,因为没有向外求。

Share

分享香香矿RateX: https://x.com/wolfdan666666/status/1873276257108127963

1/🧵 今天给大伙介绍香香矿 @RateX_Dex

快来学习并锁定接近60%的APY+积分未来空投吧!

RateX是全球第一大杠杆收益率交易所,TVL已突破1415万美元(最近一月增7倍),持续快速增长中🔥

2/🧵 RateX主要功能:

  • 最高10倍杠杆交易收益率
  • 固定收益赚取
  • 流动性挖矿

团队背景强大:

  • 获Solana基金会和币安投资
  • 核心成员来自顶级投行
  • 丰富的资管和风控经验

3/🧵 什么是YBA (收益资产)?

  • 能产生收益的资产(如mSOL、stETH)
  • DeFi基石,让用户赚取被动收入
  • 收益来自质押、借贷等

YBA分三类:

  • Rebase型:如stETH
  • 累积型:如mSOL
  • 分发型:如GLP

4/🧵 RateX创新:收益率通证化框架

  • ST(标准代币):1 ST = 1 YBA
  • YT(收益代币):代表收益部分
  • PT(本金代币):代表本金部分

核心公式:1 ST = 1 PT + 1 YT

5/🧵 交易原理:

  • YT价格反映隐含收益率
  • 交易YT = 押注未来收益率
  • 通过YT/ST交易实现多空

6/🧵 三大玩法:

  1. 杠杆交易
  • 做多:看涨收益率,借ST换YT
  • 做空:看跌收益率,借YT换ST
  • 最高10倍杠杆

7/🧵 2. 固定收益(Earn)

  • 存入ST获得PT和YT
  • 卖出YT锁定固定收益(持有-YT,做空套保)

收益计算:

  • t0时以apy1存入,t1时以apy2提取
  • 总收益 = apy1*(t1-t0) + YT价差
  • 收益率下跌时YT价差获利,上涨时亏损
  • 持有到期(YT到期为0)可锁定apy1收益率

8/🧵 3. 流动性挖矿

为YT/ST交易对提供流动性

  • 存入YBA到RateX系统
  • RateX生成ST,YT, 放一部分存起来,一部分放在AMM池里自动做市

收益来源:

  • 资产质押收益
  • 交易费分成
  • 做市商收益

9/🧵 参与建议:

  • 🟢 新手:从Earn固定收益开始
  • 🟡 进阶:LP提供流动性
  • 🔴 专业:杠杆交易(注意风险)

Finish/🧵 欢迎关注 @Solana_zh, @RateX_Dex, @RateX_CN

一起来玩转收益率交易,收获财富🧧🚀