当前位置:网站首页>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;
}
};
边栏推荐
猜你喜欢
el-upload上传组件的动态添加;el-upload动态上传文件;el-upload区分文件是哪个组件上传的。
Is PMP beneficial to work? How to choose a reliable platform to make it easier to prepare for the exam!!!
最多可以参加的会议数目[贪心 + 优先队列]
论文解读(ValidUtil)《Rethinking the Setting of Semi-supervised Learning on Graphs》
Jürgen Schmidhuber回顾LSTM论文等发表25周年:Long Short-Term Memory. All computable metaverses. Hierarchical reinforcement learning (RL). Meta-RL. Abstractions in generative adversarial RL. Soccer learn
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!!!
索引总结(突击版本)
杰理之关于 TWS 声道配置【篇】
剑指 Offer II 013. 二维子矩阵的和
小试牛刀之NunJucks模板引擎
随机推荐
ASP. Net kindergarten chain management system source code
648. 单词替换
How to open an account for stock speculation? Excuse me, is it safe to open a stock account by mobile phone?
R语言fpc包的dbscan函数对数据进行密度聚类分析、查看所有样本的聚类标签、table函数计算聚类簇标签与实际标签构成的二维列联表
银行理财产品怎么买?需要办银行卡吗?
Nunjuks template engine
使用高斯Redis实现二级索引
开源OA开发平台:合同管理使用手册
R语言dplyr包select函数、group_by函数、filter函数和do函数获取dataframe中指定因子变量中指定水平中特定数值数据列的值第三大的值
【Confluence】JVM内存调整
Netease Yunxin participated in the preparation of the standard "real time audio and video service (RTC) basic capability requirements and evaluation methods" issued by the Chinese Academy of Communica
2022.07.02
吞吐量Throughout
Classification automatique des cellules de modules photovoltaïques par défaut dans les images de lecture électronique - notes de lecture de thèse
关于自身的一些安排
[confluence] JVM memory adjustment
最多可以参加的会议数目[贪心 + 优先队列]
how to prove compiler‘s correctness
九章云极DataCanvas公司获评36氪「最受投资人关注的硬核科技企业」
The DBSCAN function of FPC package of R language performs density clustering analysis on data, checks the clustering labels of all samples, and the table function calculates the two-dimensional contin