3.无重复字符的最长字串
class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_set<char>occ;//哈希集合,记录每个字符是否出现过
//右指针,初始指向左边界左侧
int rk=-1,ans=0;
//枚举左指针的位置
for(int i=0;i<s.size();i++)
{
if(i!=0)
{
//左指针向右移动一格,移除一个字符
occ.erase(s[i-1]);
}
while(rk+1<s.size() && !occ.count(s[rk+1]))
{
occ.insert(s[rk+1]);
rk++;
}
ans=max(ans,rk-i+1);
}
return ans;
}
};
太难了,因为rk指针一开始是指向左边界的左边,所以后面在使用的时候一直忘记rk+1
还有一种暴力法。。。。。。。。
4 .寻找两个正序数组的中位数
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int m=nums1.size(),n=nums2.size(),k=0,j=0,i=0;
vector<int>sub(m+n,0);
while(i<m && j<n)
{
sub[k++]=nums1[i]<nums2[j] ? nums1[i++]:nums2[j++];
}
while(i<m) sub[k++]=nums1[i++];
while(j<n)sub[k++]=nums2[j++];
return k%2 ? sub[k/2] : (sub[k/2]+sub[k/2-1]/2.0);
}
};
先归并,在找中位数,类似于归并排序,不过没用用到两个数组都是有序这个特点