题目:2124. 检查是否所有 A 都在 B 之前
描述:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
bool checkString(char * s){
int i = 0;
int b = 0;
for (i = 0; s[i]; ++i) {
if (s[i] == 'b') {
b = 1;
} else if (s[i] == 'a') {
if (b == 1) {
return false;
}
}
}
return true;
}
题目:27. 移除元素
描述:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
原代码##class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int l = 0, r = nums.size() - 1;
while (l <= r) {
if (nums[r] != val && nums[l] == val) {
swap(nums[r], nums[l]);
}
if (nums[r] == val) {
r--;
}
if (nums[l] != val) {
l++;
}
}
return l;
}
};
思路
用双指针便能快速解决问题,定义指针** l 和 r , r **可以从头开始遍历也可以从尾部开始,从尾部开始更快速,效率更高。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)