力扣热题100

刷题笔记

(菜鸟学习,个人记录)

1.给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
主要思想:
1)左右两个指针,固定左移动右,直到右指针查找到重复出现字符,左指针右移;
2)利用unordered_set中的count函数查找该字符的出现次数;
关键实现
for(;left < s.size(); left++){
while(right < s.size() && char_set.count(s[right])== 0 ){
char_set.insert(s[right]);
ans = max(ans,right-left+1);
right++;
}
char_set.erase(s[left]);
}

2.寻找两个正序数组的中位数。
解1:
主要思想:
1)建立一个新的数组,把题目中两个数组元素都一一添加进去,sort函数进行排序。
2)判断新数组的个数奇偶性,返回中位数。
关键实现
nums.push_back(nums1[i]); //添加vector元素
sort(nums.begin(),nums.end()); //排序
注意点:
返回中位数可能非整数,比如·1,2,3,4「为2.5。
解2:(最K小),未实现
3… 最长回文子串
解1(中心扩展)
主要思想:
1)若字串为回文串,判断其左右字符是否相等;
2)注意奇偶字符,比如bab和baab两者区别。分两种情况进行判断;
3)遍历每一个字符作为回文中心,选取最长字符串;
关键实现
while (left >= 0 && right < s.size() && s[left] == s[right]){
left–;
right++;
}
return {left+1,right-1};
return s.substr( start, end - start+1);
解2: 动态规划(未实现
4.z字形变换
解1 (按行排序)
主要思想:
1)方向变换;当前行;
关键实现
if(currentrow == 0 || currentrow==numRows-1) go_change = !go_change;
if(go_change) currentrow+=1;
if(!go_change) currentrow-=1;
5. 有效的括号
主要思想:
1)建立哈希表快速搜索;2)使用栈先进后出原则,左括号入栈,右括号进行匹配;
关键实现
unordered_map<char,char> pairs
6. 盛最多谁的容器
主要思想:
1)一开始暴力使用两个for循环发现超出时间限制;2)改用双指针法,左右指针通过比较所代表的实际height值,较小者向中间靠拢;
关键实现
int ac_ans = ac_height*(end - start);
if(height[start] < height[end]){
start++;
}
else{
end–;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值