专注 效率 记忆
预习 笔记 复习 做题
欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)
文章字体风格:
红色文字表示:重难点★✔
蓝色文字表示:思路以及想法★✔如果大家觉得有帮助的话,感谢大家帮忙
点赞!收藏!转发!
本博客带大家一起学习,我们不图快,只求稳扎稳打。
由于我高三是在家自学的,经验教训告诉我,学习一定要长期积累,并且复习,所以我推出此系列。
只求每天坚持40分钟,一周学5天,复习2天
也就是一周学10道题
50天后我们就可以学完76道题,相信50天后,我们一定可以有扎实的代码基础!我们每天就40分钟,和我一起坚持下去吧!
qq群:866984458
本题出自 acwing网站
这个系列是免费的
打卡即刻退回费用。
第四十二天【剑指Offer例题代码 系列】
-
- [63. 和为S的两个数字【unordered_set<int>】](#63. 和为S的两个数字【unordered_set<int>】)
-
-
- unordered_set<int>
- [利用hash.count 和 hash.insert](#利用hash.count 和 hash.insert)
- unordered_map
- [利用find != mp.end() 和 mp[x] = a;](#利用find != mp.end() 和 mp[x] = a;)
-
- [64. 和为S的连续正数序列【双指针】](#64. 和为S的连续正数序列【双指针】)
- [65. 翻转单词顺序【微软面试题】](#65. 翻转单词顺序【微软面试题】)
- [66. 左旋转字符串](#66. 左旋转字符串)
63. 和为S的两个数字【unordered_set】
unordered_set
利用hash.count 和 hash.insert
cpp
class Solution {
public:
vector<int> findNumbersWithSum(vector<int>& nums, int target) {
unordered_set<int> hash;
for (auto x : nums)
{
if (hash.count(target - x)) return vector<int>{target - x, x};
hash.insert(x);
}
return vector<int>();
}
};
unordered_map
利用find != mp.end() 和 mp[x] = a;
cpp
class Solution {
public:
vector<int> findNumbersWithSum(vector<int>& nums, int target) {
vector<int> ans;
unordered_map<int,int> mp;
for(auto x:nums){
if(mp.find(target-x)!=mp.end())
{
ans.push_back(x);
ans.push_back(target-x);
return ans;
}
mp[x] = target-x;
}
}
};
64. 和为S的连续正数序列【双指针】
由于需要的是连续的
所以考虑双指针
cpp
class Solution {
public:
vector<vector<int> > findContinuousSequence(int sum) {
vector<vector<int>> res;
for (int i = 1, j = 1, s = 1; i <= sum; i ++ )
{
while (s < sum) j ++, s += j;
if (s == sum && j > i)
{
vector<int> line;
for (int k = i; k <= j; k ++ ) line.push_back(k);
res.push_back(line);
}
s -= i;
}
return res;
}
};
65. 翻转单词顺序【微软面试题】
字符串读入处理:全部读入,通过遍历处理
看样例
首先我们知道的是
一定是把输入的 全部翻转
但是翻转过来我们发现 所有单词也都是翻转的
所以我们先把所有单词翻转一遍
然后再整体翻转一遍
cpp
class Solution {
public:
string reverseWords(string s) {
for (int i = 0; i < s.size(); i ++ )
{
int j = i;
while (j < s.size() && s[j] != ' ') j ++ ;
reverse(s.begin() + i, s.begin() + j);
i = j;
}
reverse(s.begin(), s.end());
return s;
}
};
66. 左旋转字符串
cpp
class Solution {
public:
string leftRotateString(string str, int n) {
reverse(str.begin(), str.end());
reverse(str.begin(), str.begin() + str.size() - n);
reverse(str.begin() + str.size() - n, str.end());
return str;
}
};