练习leetcode题库3,4,33,34
题目链接3.无重复字符的最长子串
https://leetcode.cn/problems/longest-substring-without-repeating-characters/description/
通过滑动窗口找出最长的不重复子字符串,从左向右依次移动右指针,进行每次碰到重复,移动左指针知道元素无重复,更新子串同时更新最大长度。
点击查看代码
class Solution {
public:
int lengthOfLongestSubstring(string s) {
set<char> window;
int n = s.length();
int l = 0, r = 0, max = 0;
while(r < n){
if(!window.count(s[r])){
window.insert(s[r]);
if(r - l + 1 > max){
max = r - l + 1;
}
r++;
}else{
window.erase(s[l]);
l++;
}
}
return max;
}
};
4.寻找两个正序数组的中位数
https://leetcode.cn/problems/median-of-two-sorted-arrays/description/
先合并两个数组到新的数组,再找中位数。
点击查看代码
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int m = nums1.size();
int n = nums2.size();
vector<int> a;
double mid;
for(int i = 0; i < m; i++){
a.push_back(nums1[i]);
}
for(int i = 0; i < n; i++){
a.push_back(nums2[i]);
}
sort(a.begin(),a.end());
if((m + n) % 2 == 0){
mid = (a[(m + n) / 2] + a[(m + n) / 2 - 1]) / 2.0;
}else{
mid = a[(m + n) / 2];
}
return mid;
}
};
33.搜索旋转排序数组
https://leetcode.cn/problems/search-in-rotated-sorted-array/
遍历数组确定目标target是否存在于数组。
点击查看代码
class Solution {
public:
int search(vector<int>& nums, int target) {
for(int i = 0; i < nums.size(); i++){
if(nums[i] == target){
return i;
}
}
return -1;
}
};
34.在排序数组中查找元素的始末位置
https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array/
用二分法分开查找目标target的始末位置。
找起点位置时每次找到移动向左左指针,直到确定起点位置;同理,终点位置边界向右移动直到找到终点位置。
点击查看代码
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
if(find(nums.begin(), nums.end(), target) == nums.end()){
return {-1, -1};
}else{
int s = -1, e = -1;
int l = 0, r = nums.size() - 1;
while (l <= r){
int mid = (l + r) / 2;
if (nums[mid] == target){
s = mid;
r = mid - 1;
}else if(nums[mid] < target){
l = mid + 1;
} else {
r = mid - 1;
}
}
l = 0, r = nums.size() - 1;
while(l <= r){
int mid = (l + r) / 2;
if (nums[mid] == target){
e = mid;
l = mid + 1;
}else if(nums[mid] < target){
l = mid + 1;
}else{
r = mid - 1;
}
}
return {s, e};
}
}
};

浙公网安备 33010602011771号