搜索旋转排序数组
题目链接:https://leetcode-cn.com/problems/search-in-rotated-sorted-array/
想到了二分查找,这个思路稍微复杂了点
class Solution {
public:
int search(vector<int>& nums, int target) {
if(nums.size()==0)
return -1;
int left=0;
int right=nums.size()-1;
if(target==nums[left])
return left;
if(target==nums[right])
return right;
while(left<=right)
{
int mid=left+(right-left)/2;
if(nums[mid]==target)
return mid;
else if(nums[mid]<nums[right])
{
if(target>nums[mid]&&target<=nums[right])
left=mid+1;
else
right=mid-1;
}
else
{
if(target>=nums[left]&&target<nums[mid])
right=mid-1;
else
left=mid+1;
}
}
return -1;
}
};
(1)是二分法的变形。
旋转排序数组有2个递增区间,左侧和右侧
(2)如果中间值落在右侧递增区间:即nums[mid]<nums[j]。
如果target值落在nums[mid]和nums[j]中,调整左侧边界,否则调整右侧边界。
(3)如果中间值落在左侧递增区间:即nums[mid]>nums[j]。
如果target值落在nums[i]和nums[mid]中间,调整右侧边界,否则调整左侧边界。
字符串相乘
题目链接:https://leetcode-cn.com/problems/multiply-strings/
class Solution {
public:
string multiply(string num1, string num2) {
if(num1[0]=='0'||num2[0]=='0')
{
return "0";
}
int n1=num1.size();
int n2=num2.size();
strin