# 程序员进阶之算法练习（四十八）LeetCode

### 正文

#### 题目1.两数相加

```class Solution {
public:
ListNode* addTwoNumbers(ListNode* node1, ListNode* node2) {
if (!node1) {
return node2;
}
if (!node2) {
return node1;
}
ListNode *cur = NULL, *head = NULL;
while (node1 || node2) {
if (node1) {
sum += node1->val;
node1 = node1->next;
}
if (node2) {
sum += node2->val;
node2 = node2->next;
}
if (sum >= 10) {
sum -= 10;
}
if (!cur) {
cur = new ListNode(sum);
cur->next = NULL;
}
else {
cur->next = new ListNode(sum);
cur = cur->next;
cur->next = NULL;
}
}
cur = cur->next;
cur->next = NULL;
}
}
};```

#### 题目2.无重复字符的最长子串

Example 2: Input: "bbbbb" Output: 1 最长子串是b，长度是1；（bb的话出现重复的b）

```class Solution {
public:
int lengthOfLongestSubstring(string s) {
int vis[257] = {0};
int maxLen = 0, cur = 0;
for (int i = 0; i < s.length(); ++i) {
while (vis[s[i]]) {
vis[s[cur]] = 0;
++cur;
}
vis[s[i]] = 1;
maxLen = max(maxLen, i - cur + 1);
}
return maxLen;
}
};```

### 题目3.Z 字形变换

``` L   C   I   R
E T O E S I I G
E   D   H   N```

string convert(string s, int numRows); 示例 1:

``` L     D     R
E   O E   I I
E C   I H   N
T     S     G```

```const int N = 50000;

class Solution {
public:
string ans[N];
string convert(string s, int numRows) {
if (numRows <= 1) {
return s;
}
string ret;
for (int i = 0; i < numRows; ++i) {
ans[i].clear();
}
int y = 0, gap = 1;
for (int i = 0; i < s.length(); ++i) {
ans[y].push_back(s[i]);
y += gap;
if (y < 0) {
y = 1;
gap = 1;
}
else if (y >= numRows) {
y = numRows - 2;
gap = -1;
}
}

for (int i = 0; i < numRows; ++i) {
ret += ans[i];
}
return ret;
}

}leetcode;```

#### 题目4.盛最多水的容器

```class Solution {
public:
int maxArea(vector<int>& height) {
int ans = 0;
int left = 0, right = height.size() - 1;
while (left < right) {
ans = max(ans, (right - left) * min(height[left], height[right]));
if (height[left] < height[right]) {
++left;
}
else {
--right;
}
}
return ans;
}

}leetcode;```

0 条评论

• ### 程序员进阶之算法练习（四十九）LeetCode

题目链接 题目大意： 给定一个整数数组 nums 和一个目标值 target，请你在该数组中找出和为目标值的那 两个 整数，并返回他们的数组下标。 你可以...

• ### 程序员进阶之算法练习（十八）

前言 最近在接触新知识，也是选择2017年的方向。 其他文集更新会放缓，没有学习就没有心得，肚中无墨就无从下笔。 但是算法练习还是挺好玩的，欢迎关注algo...

• ### 程序员进阶之算法练习（四十四）

题目链接 题目大意： 给出整数x，求两个整数a和b，满足： ???(?,?)+???(?,?)=? . GCD是最大公约数； LCM是最小公约数；

• ### 程序员进阶之算法练习（十四）

前言 坚持做算法练习对开发的好处是抽象能力变强，拿到一个需求能很快对其进行抽象，然后再用学过的设计模式相关知识进行整理，最后用代码实现。 最大的好处在于：对...

• ### 程序员进阶之算法练习（二十八）

前言 四道题，分别锻炼哈希、贪心、贪心+排序、二分四个能力。 第一题较为简单，后续的题目都需要一定的基础。 贪心是最基础的能力，codeforce有专门的 ...

• ### 程序员进阶之算法练习（三十四）LeetCode专场

LeetCode上的题目是大公司面试常见的算法题，今天的目标是拿下5道算法题： 1、2、3题都是Medium的难度，大概是头条的面试题水准； 4、5题是Hard...

• ### 程序员进阶之算法练习（二十四）

前言 已经有三个月未更新算法文章，大厂工作环境是步步紧逼的，使得所有的人越来越忙碌。余下的学习时间，要用于技术预研、知识面开阔、底层原理理解等等，慢慢算法只能占...

• ### 程序员进阶之算法练习（四十二）

题目链接 题目大意： n个学生参加测试，一共有m道题，每道题的答案可能是(A, B, C, D , E)中的一个； m道题分别有?1,?2,…,??，共m...

• ### 程序员进阶之算法练习（四十七）

题目链接 题目大意： 给出一个整数1~n的排列。 接下来有m个询问，每个询问包括 l, r, x。 (l <= x <= r) [l, r]区间内的数字...