有效的括号
char pairs(char a) {
if (a == '}') return '{';
if (a == ']') return '[';
if (a == ')') return '(';
return 0;
}
bool isValid(char* s) {
int n = strlen(s);
if (n % 2 == 1) {
return false;
}
int stk[n + 1], top = 0;
for (int i = 0; i < n; i++) {
char ch = pairs(s[i]);
if (ch) {
if (top == 0 || stk[top - 1] != ch) {
return false;
}
top--;
} else {
stk[top++] = s[i];
}
}
return top == 0;
}
二分法查找
class Solution {
public:
int search(vector<int>& nums, int target) {
int mid = 0,low = 0,high = nums.size()-1;
while(low < high){
mid = low + (high - low)/2;
if(nums[mid] == target)return mid;
else if(nums[mid] < target) low = mid + 1;
else high = mid - 1;
}
if(nums[low] == target) return low;
else return -1;
}
};
二分查找变种:
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int length = nums.size();
int low = 0;
int high = length - 1;
int mid=(low-high)/2+high;
while(low <= high){
if(nums[mid] == target )
return mid;
else if(target > nums[mid])
low = mid +1;
else if(target < nums[mid])
high = mid -1;
mid=(low-high)/2+high;
}
return mid+1;
}
};