☘前言☘
开更五月集训专题,由浅入深,深入浅出,飞向大厂!
🧑🏻作者简介:一个从工业设计改行学嵌入式的年轻人
✨联系方式:2201891280(QQ)
⏳全文大约阅读时间: 20min
全文目录
917. 仅仅反转字母
解题思路1
双指针直接交换就好了
代码
class Solution {
public:
string reverseOnlyLetters(string s) {
int left = 0, right = s.size() - 1;
while(left < right){
while(left <= right && !isalpha(s[left])) ++left;
while(left <= right && !isalpha(s[right])) --right;
if(left < right) s[left] ^= s[right] ^= s[left] ^= s[right];//swap
++left, --right;
}
return s;
}
};
注意的点
- 看我神奇swap操作 嘻嘻
167. 两数之和 II - 输入有序数组
解题思路1
双指针查找就完事了。
代码
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
int left = 0, right = numbers.size() - 1;
vector<int> ans;
while(left < right){
while(left < right && numbers[left] + numbers[right] < target) ++left;
while(left < right && numbers[left] + numbers[right] > target) --right;
if(left < right && numbers[left] + numbers[right] == target){
ans.push_back(left + 1),ans.push_back(right + 1);
break;
}
}
return ans;
}
};
注意的点
没啥。蛮好的。
165. 比较版本号
解题思路
直接遍历,注意虽然越界了,但是我没有再访问元素 所以是无所谓的。
代码
class Solution {
public:
int compareVersion(string version1, string version2) {
int size1 = version1.size(), size2 = version2.size(), left1 = 0, left2 = 0;
while( left1 < size1 || left2 < size2){
int num1 = 0, num2 = 0;
for(;left1 < size1 && version1[left1] != '.';++left1)
num1 *= 10, num1 += version1[left1] - '0';
++left1; //跳过.
for(;left2 < size2 && version2[left2] != '.';++left2)
num2 *= 10, num2 += version2[left2] - '0';
++left2; //跳过.
if(num1 != num2)
return num1 > num2 ? 1 : -1;
}
return 0;
}
};
注意的点
唉,挺好
443. 压缩字符串
解题思路
因为是压缩,所以直接在原数组上操作就好了。
代码
class Solution {
public:
int compress(vector<char>& chars) {
char now = chars[0];
int nowsize = 1, n = chars.size(), nowans = -1;
for(int i = 1;i < n;++i)
if(chars[i] == now) ++nowsize;
else{
chars[++nowans] = now; //插入正确的元素
string tmp = to_string(nowsize);int len = tmp.size();
if(nowsize != 1)
for(int j = 0;j < len ;++j) chars[++nowans] = tmp[j];
now = chars[i],nowsize = 1;
}
chars[++nowans] = now; //插入正确的元素
string tmp = to_string(nowsize);int len = tmp.size();
if(nowsize != 1){
printf("%d %d\n",nowsize,len);
for(int j = 0;j < len ;++j) chars[++nowans] = tmp[j];
}
return nowans + 1;
}
};
注意的点
- 没啥
写在最后
我还是希望能从简单的题目得到一些东西。