当前位置:网站首页>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;
}
};
边栏推荐
- L1-028 judging prime number (Lua)
- [Verilog advanced challenge of Niuke network question brushing series] ~ multi bit MUX synchronizer
- 一张图深入的理解FP/FN/Precision/Recall
- 多个线程之间如何协同
- Visual Studio 插件之CodeMaid自动整理代码
- Key points of anti reptile: identifying reptiles
- 歌单11111
- Nunjuks template engine
- Responsibility chain model - unity
- Interpretation of transpose convolution theory (input-output size analysis)
猜你喜欢

Research and practice of super-resolution technology in the field of real-time audio and video

Tips and tricks of image segmentation summarized from 39 Kabul competitions

Chief technology officer of Pasqual: analog quantum computing takes the lead in bringing quantum advantages to industry

Interpretation of transpose convolution theory (input-output size analysis)

国家网信办公布《数据出境安全评估办法》:累计向境外提供10万人信息需申报

Flink并行度和Slot详解

超分辨率技术在实时音视频领域的研究与实践

杰理之手动配对方式【篇】

Empowering smart power construction | Kirin Xin'an high availability cluster management system to ensure the continuity of users' key businesses

剑指 Offer II 013. 二维子矩阵的和
随机推荐
Flink并行度和Slot详解
R语言ggplot2可视化:使用ggpubr包的ggqqplot函数可视化QQ图(Quantile-Quantile plot)
openEuler 有奖捉虫活动,来参与一下?
CMD command enters MySQL times service name or command error (fool teaching)
R language ggplot2 visualization: use the ggstripchart function of ggpubr package to visualize the dot strip plot, set the position parameter, and configure the separation degree of different grouped
杰理之测试盒配置声道【篇】
杰理之关于 TWS 交叉配对的配置【篇】
【剑指offer】剑指 Offer II 012. 左右两边子数组的和相等
Jerry's headphones with the same channel are not allowed to pair [article]
Matplotlib drawing 3D graphics
项目经理『面试八问』,看了等于会了
Tips and tricks of image segmentation summarized from 39 Kabul competitions
Nunjuks template engine
Kirin Xin'an cloud platform is newly upgraded!
RESTAPI 版本控制策略【eolink 翻译】
R language ggplot2 visualization: use the ggdensity function of ggpubr package to visualize the packet density graph, and use stat_ overlay_ normal_ The density function superimposes the positive dist
九章云极DataCanvas公司获评36氪「最受投资人关注的硬核科技企业」
ASP. Net kindergarten chain management system source code
Visual Studio 插件之CodeMaid自动整理代码
Tp6 realize Commission ranking