GitHub同步更新(已分类):Data_Structure_And_Algorithm-Review
公众号:URLeisure 的复习仓库
公众号二维码见文末
以下是本篇文章正文内容,下面案例可供参考。

输入:s = “dfa12321afd”
输出:2
解释:出现在 s 中的数字包括 [1, 2, 3] 。第二大的数字是 2 。
输入:s = “abc1111”
输出:-1
解释:出现在 s 中的数字只包含 [1] 。没有第二大的数字。
- 1 <= s.length <= 500
- s 只包含小写英文字母和(或)数字。
最大 和 第二大 数字;class Solution {
public:
int secondHighest(string s) {
int first = -1, second = -1;
for (char ch: s) {
if (ch >= '0' && ch <= '9') {
if (ch - '0' > first) {
second = first;
first = ch - '0';
} else if (ch - '0' > second && ch - '0' != first) second = ch - '0';
}
}
return second;
}
};
class Solution {
public:
int secondHighest(string s) {
set<int> st;
for (char ch: s) {
if (ch >= '0' && ch <= '9') {
st.insert(ch - '0');
}
}
if (st.size() <= 1) return -1;
st.erase(*st.rbegin());
return *st.rbegin();
}
};
set 中元素有序且不可重复、不可更改,查询效率为 O ( l o g n ) O(logn) O(logn),增删效率为 O ( l o g n ) O(logn) O(logn)。
set 中常用的方法:
insert(key_value)-------向 set 中插入 key_value
begin()-----返回 set 容器第一个元素的迭代器
end()--------返回 set 容器最后一个元素的迭代器
clear()-------删除 set 容器中的所有的元素
empty()-----判断 set 容器是否为空
size()--------返回当前 set 容器中的元素个数
rbegin()-----返回指向容器中最后一个元素的反向迭代器
rend()-------返回指向容器中第一个元素的反向迭代器
erase(iterator)------删除某个迭代器指向的值
find(key_value)----返回key_value的迭代器,如果没找到则返回 end()。
lower_bound(key_value) ----返回第一个大于等于 key_value 的迭代器
upper_bound(key_value)----返回最后一个大于等于 key_value 的迭代器
set<int> st;
st.clear();
st.insert(1);
st.insert(2);
st.insert(3);
int length = st.size();
set<int>::iterator it1, it2, it3, it4;
set<int>::reverse_iterator rit1, rit2;
it1 = st.begin();
it2 = st.end();
rit1 = st.rbegin();
rit2 = st.rend();
st.erase(it1);
it3 = st.lower_bound(2);
it4 = st.upper_bound(2);

下期预告: 明天的每日一题