目录
704.二分查找
class Solution {
public:
int search(vector<int>& nums, int target) {
int left=0;
int right=nums.size()-1;
while(left<=right){
int mid=(left+right)/2;
if(nums[mid]>target){
right=mid-1;
}
else if(nums[mid]<target){
left=mid+1;
}
else {
return mid;
}
}
return -1;
}
};
27. 移除元素
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int cnt=0;
for(int i=0;i<nums.size();i++){
if(nums[i]!=val){
nums[cnt++]=nums[i];
}
}
return cnt;
}
};
977. 有序数组的平方
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
for(int i=0;i<nums.size();i++){
nums[i]=nums[i]*nums[i];
}
vector<int> ans(nums.size());
int left=0;
int right=nums.size()-1;
int k=right;
while(left<=right){
if(nums[left]<=nums[right]){
ans[k--]=nums[right--];
}
else {
ans[k--]=nums[left++];
}
}
return ans;
}
};
844. 比较含退格的字符串
法一:重构
class Solution {
public:
bool backspaceCompare(string s, string t) {
string ns;
string nt;
for (int i = 0; i < s.size(); i++) {
if (s[i] == '#') {
if (ns.size()) {
ns.pop_back();
}
} else {
ns.push_back(s[i]);
}
}
for (int i = 0; i < t.size(); i++) {
if (t[i] == '#') {
if (nt.size()) {
nt.pop_back();
}
} else {
nt.push_back(t[i]);
}
}
if (ns.size() != nt.size()) {
return false;
}
for (int i = 0; i < ns.size(); i++) {
if (ns[i] != nt[i]) {
return false;
}
}
return true;
}
};
法二:双指针(逆向)
class Solution {
public:
bool backspaceCompare(string s, string t) {
int sp = s.size() - 1;
int tp = t.size() - 1;
int scnt = 0;
int tcnt = 0;
while (sp >= 0 || tp >= 0) {
while (sp >= 0) {
if (s[sp] == '#') {
scnt++;
sp--;
} else if (scnt) {
scnt--;
sp--;
} else {
break;
}
}
while (tp >= 0) {
if (t[tp] == '#') {
tcnt++;
tp--;
} else if (tcnt) {
tcnt--;
tp--;
} else {
break;
}
}
if (sp >= 0 && tp >= 0) {
if (s[sp] != t[tp]) {
return false;
}
} else {
if (sp >= 0 || tp >= 0) {
return false;
}
}
sp--;
tp--;
}
return true;
}
};
283. 移动零
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int cnt = 0;
for (int i = 0; i < nums.size(); i++) {
if (nums[i] != 0) {
nums[cnt++] = nums[i];
}
}
for (int i = cnt; i < nums.size(); i++) {
nums[i] = 0;
}
}
};
26. 删除有序数组中的重复项
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int cnt=1;
for(int i=1;i<nums.size();i++){
if(nums[i]!=nums[cnt-1]){
nums[cnt++]=nums[i];
}
}
return cnt;
}
};
367. 有效的完全平方数
class Solution {
public:
bool isPerfectSquare(int num) {
int n=sqrt(num);
if(n*n==num)return true;
return false;
}
};
69. x 的平方根
class Solution {
public:
int mySqrt(int x) {
return (int)sqrt(x);
}
};
35. 搜索插入位置
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int left=0;
int right=nums.size()-1;
int ans=-1;
while(left<=right){
int mid=left-(left-right)/2;
if(nums[mid]>target){
right=mid-1;
}
else if(nums[mid]<target){
left=mid+1;
}
else {
ans=mid;
left=mid+1;
}
}
if(ans!=-1){
return ans;
}
return left;
}
};
34. 在排序数组中查找元素的第一个和最后一个位置
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
// 右边界
int left = 0;
int right = nums.size() - 1;
int pr = -2;
while (left <= right) {
int mid = left - (left - right) / 2;
if (nums[mid] > target) {
right = mid - 1;
} else {
left = mid + 1;
pr = left;
}
}
// 左边界
left = 0;
right = nums.size() - 1;
int pl = -2;
while (left <= right) {
int mid = left - (left - right) / 2;
if (nums[mid] >= target) {
right = mid - 1;
pl = right;
} else {
left = mid + 1;
}
}
// 边界外
if (pr == -2 || pl == -2)
return {-1, -1};
// 边界内
if (pr - pl > 1)
return {pl + 1, pr - 1};
// 边界内但!=target
return {-1, -1};
}
};

Ciallo~(∠・ω〈)⌒☆

470

被折叠的 条评论
为什么被折叠?



