当前位置:网站首页>LeetCode_ 7_ five
LeetCode_ 7_ five
2022-07-07 19:55:00 【Yuucho】
1. Sum of two numbers
[ Sum of two numbers ](1. Sum of two numbers - Power button (LeetCode))

class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int n = nums.size();
// Open a mapping array
vector<int> idxs;
for(int i = 0; i < n; ++i) idxs.push_back(i);
// You can't sort it directly a, Yes a Array subscript mapping array sorting
sort(idxs.begin(), idxs.end(), [nums, idxs](int i, int j){
return nums[idxs[i]] < nums[idxs[j]];
});
int l = 0, r = n - 1;
vector<int> ret;
while(l < r){
int sum = nums[idxs[l]] + nums[idxs[r]];
if(sum == target){
ret.push_back(idxs[l]);
ret.push_back(idxs[r]);
break;
}else if(sum < target){
l++;
}else{
r--;
}
}
return ret;
}
};
2. Addition of two numbers
[ Addition of two numbers ](2. Addition of two numbers - Power button (LeetCode))
High precision addition , It's a bit like adding strings we've done .
(1) We can add it by bits , Consider carrying , After each bit operation, the carry must be reset .
(2) Linked lists are not equal in length
(2) If two linked lists are of equal length and the last digit needs to be carried, add 1.

class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
// Open a header node to store the calculation results of each bit
ListNode* H = new ListNode();
//ptr Traverse ,H->next return
ListNode* ptr = H;
int carry = 0;
while(l1 || l2 || carry){
int val = 0;
if(l1) val += l1->val, l1 = l1->next;
if(l2) val += l2->val, l2 = l2->next;
val += carry;
ListNode* node = new ListNode(val % 10);
ptr->next = node;
ptr = node;
// Reset carry
carry = val / 10;
}
return H->next;
}
};
3. Longest substring without repeating characters
Longest substring without repeating characters
Suppose we randomly intercept a part of the original string , Then this part happens to be a substring without repeated characters , We can try to expand on both sides . Only if you don't encounter the same characters as this part, you can expand all the way .
alike , We can also fix one end , Use the other end to expand .
Because the string given by the title is only composed of English letters 、 Numbers 、 Match and space , Is a relatively limited string , So we can open a hash table , To count the number of occurrences of each character in the current interval .
When each character appears only once , We can expand . When a character appears twice , We don't need to delete the characters on the extension side , Instead, let the fixed end cross the position where the character last appeared . It forms a legal New Area .
The sliding window , After two pointers sweep to the end , This problem is solved , So time complexity is O(n).

class Solution {
public:
int lengthOfLongestSubstring(string s) {
int n = s.length();
int ret = 0;
// Fixed left section
int l = 0;
// Open a hash table
unordered_map<char, int> count;
for(int r = 0; r < n; ++r){
count[s[r]]++;
// If a character appears, the left range crosses this character, that is l++
// At the same time, the number of occurrences of this character --
while(count[s[r]] >= 2){
count[s[l++]]--;
}
ret = max(ret,r-l+1);
}
return ret;
}
};
4. Find the median of two positive arrays
4. Find the median of two positive arrays - Power button (LeetCode)
emmm, This problem requires that the time complexity should be O(log (m+n)), It's more difficult .
(1) First , We should only grasp the median . Let's calculate the median first , This median is actually a number in the middle of the merged two arrays , Let's assume that k individual .
here k According to the size of the array n To discuss the odd and even numbers of , These two cases can be combined into a formula with a simple mathematical skill .
Because when it's odd (n+1)/2、(n+2)/2 Pointing to the same location .

(2) Yes k Do two points
We take the first two arrays respectively h(k Half of ) individual , Put it into a size k In the container . At this time, the sum of the lengths of the two extracted arrays must be less than or equal to k, If the array is odd, one less , If the array is even, it is equal to k.
If a[h-1]<=b[h-1], Then the red paragraph can never be the first k Elements ( The two arrays are ordered ).
At this point, we can eliminate the first half of the red range , In the next round, we should find the No. in the Yellow range k-h Number .
If b[h-1]<=a[h-1], We will eliminate the blue segment .

(3) The end condition
- Because every time we score two k When , All the a、b One prefix of the two arrays is reduced . So the length of these two arrays cannot be guaranteed , Because it's possible that in a certain two-point , One array has been completely reduced . At this point, we directly read the k-1 One element will do .
- If both arrays are not reduced ,k Reduced to 1. Then it is the smaller of the minimum values of the two arrays .
class Solution {
public:
// from a[sta,n-1] as well as b[stb,m-1] Find the number kth Elements
int findKth(const vector<int>& a, int sta, const vector<int>& b, int stb, int kth) {
//a Reduced
if (sta >= a.size()) return b[stb + kth - 1];
//b Reduced
if (stb >= b.size()) return a[sta + kth - 1];
//k Reduced to 1
if (kth == 1) return min(a[sta], b[stb]);
// Start two
int half = kth / 2;
int vala = sta + half > a.size() ? a.back() : a[sta + half - 1];
int counta = sta + half > a.size() ? a.size() - sta : half;
int valb = stb + half > b.size() ? b.back() : b[stb + half - 1];
int countb = stb + half > b.size() ? b.size() - stb : half;
if (vala <= valb)
return findKth(a, sta + counta, b, stb, kth - counta);
return findKth(a, sta, b, stb + countb, kth - countb);
}
double findMedianSortedArrays(vector<int>& a, vector<int>& b) {
int n = a.size();
int m = b.size();
int idx0 = (n + m + 1) / 2;
int idx1 = (n + m + 2) / 2;
int val0 = findKth(a, 0, b, 0, idx0);
int val1 = findKth(a, 0, b, 0, idx1);
return 1. * (val0 + val1) / 2;
}
};
int idx1 = (n + m + 2) / 2;
int val0 = findKth(a, 0, b, 0, idx0);
int val1 = findKth(a, 0, b, 0, idx1);
return 1. * (val0 + val1) / 2;
}
};
边栏推荐
- Automatic classification of defective photovoltaic module cells in electroluminescence images-論文閱讀筆記
- Classification automatique des cellules de modules photovoltaïques par défaut dans les images de lecture électronique - notes de lecture de thèse
- [Verilog advanced challenge of Niuke network question brushing series] ~ multi bit MUX synchronizer
- Automatic classification of defective photovoltaic module cells in electroluminescence images-论文阅读笔记
- Introduction to bit operation
- 现在股票开户可以直接在网上开吗?安全吗。
- LeetCode_7_5
- Redis——基本使用(key、String、List、Set 、Zset 、Hash、Geo、Bitmap、Hyperloglog、事务 )
- L1-027 rental (Lua)
- How to open an account for stock speculation? Excuse me, is it safe to open a stock account by mobile phone?
猜你喜欢

剑指 Offer II 013. 二维子矩阵的和

Matplotlib drawing 3D graphics

2022.07.04

【RT-Thread env 工具安装】

开源重器!九章云极DataCanvas公司YLearn因果学习开源项目即将发布!

2022如何评估与选择低代码开发平台?

Openeuler prize catching activities, to participate in?

RESTAPI 版本控制策略【eolink 翻译】

Automatic classification of defective photovoltaic module cells in electroluminescence images-論文閱讀筆記

杰理之手动配对方式【篇】
随机推荐
项目经理『面试八问』,看了等于会了
openEuler 资源利用率提升之道 01:概论
杰理之手动配对方式【篇】
PV static creation and dynamic creation
杰理之测试盒配置声道【篇】
一张图深入的理解FP/FN/Precision/Recall
超分辨率技术在实时音视频领域的研究与实践
ASP. Net gymnasium integrated member management system source code, free sharing
torch.nn.functional.pad(input, pad, mode=‘constant‘, value=None)记录
ASP.NET幼儿园连锁管理系统源码
Specify the version of OpenCV non-standard installation
[Verilog advanced challenge of Niuke network question brushing series] ~ multi bit MUX synchronizer
“本真”是什么意思
Openeuler prize catching activities, to participate in?
R language ggplot2 visualization: use the ggviolin function of ggpubr package to visualize the violin diagram, set the palette parameter to customize the filling color of violin diagrams at different
Visual Studio 插件之CodeMaid自动整理代码
ant desgin 多选
2022.07.05
Le PGR est - il utile au travail? Comment choisir une plate - forme fiable pour économiser le cœur et la main - d'œuvre lors de la préparation de l'examen!!!
一锅乱炖,npm、yarn cnpm常用命令合集