一、搜索螺旋排序数组
nums = [4, 5, 6, 7, 0, 1, 2], target = 0
class Solution {
public int search(int[] nums, int target) {
int left = 0, right = nums.length-1, mid = 0;
while(left <= right){
mid = (left + right) / 2;
if(nums[mid] == target){
return mid;
}
if(nums[mid] > nums[left]){ // 左半边有序
if(nums[left] <= target && target < nums[mid])
right = mid - 1;
else
left = mid + 1;
}
else{ // 右半边有序
if(nums[mid] < target && target <= nums[right])
left = mid + 1;
else
right = mid - 1;
}
}
return -1;
}
}
二、在排序数组中寻找第一个和最后一个元素的位置
nums = [5, 7, 7, 8, 8, 10], target = 8
class Solution {
public int[] searchRange(int[] nums, int target) {
int left = 0, right = nums.length-1, mid = 0;
int[] result = {-1, -1};
while(left <= right){
mid = (left + right) / 2;
if(nums[mid] == target){
if(mid == 0 || nums[mid-1] < nums[mid]){ // 核心代码
result[0] = mid;
break;
}
else
right = mid-1;
}
else{
if(nums[mid] < target){
left = mid + 1;
}
else
right = mid - 1;
}
}
for(int i=result[0]; i>=0 && i<nums.length; i++){
if(nums[i] == target)
result[1] = i;
}
return result;
}
}
三、字符串匹配算法
query_string = "ababcabccabab"
query = "abcca"
def function(query_string, query):
pointer_1 = 0
pointer_2 = 0
while pointer_1 < len(query_string) and pointer_2 < len(query):
if query_string[pointer_1] == query[pointer_2]:
pointer_1 += 1
pointer_2 += 1
else:
pointer_1 = pointer_1 - pointer_2 + 1
pointer_2 = 0
if pointer_2 >= len(query):
return pointer_1 - pointer_2
else:
return 0