LeetCode || 大杂烩w
454. 4Sum II
题意:给四个数组,每个数组内取一个数使得四个数和为0,问有多少种取法
思路:枚举为On4,考虑两个数组,On2枚举所有可能的和,将和的出现次数存入map中,On2枚举另两个数组,看是否加和为0
class Solution {
public:
int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) {
int na = A.size(), nb = B.size(), nc = C.size(), nd = D.size();
int cnt = ;
map<int, int> mp;
for (int i = ; i < na; i++) {
for (int j = ; j < nb; j++) {
int sum = A[i] + B[j];
if (mp[-sum]) mp[-sum]++;
else mp[-sum] = ;
}
}
for (int i = ; i < nc; i++) {
for (int j = ; j < nd; j++) {
int sum = C[i] + D[j];
if (mp[sum]) cnt += mp[sum];
}
}
return cnt;
}
};
24. Swap Nodes in Pairs
题意:交换一个链表中每相邻两个元素
想看到就是多加个头的空指针操作(
ListNode *emptyhead = new ListNode(-);
emptyhead -> next = head;
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode *emptyhead = new ListNode(-);
emptyhead -> next = head;
ListNode *p = head, *q, *lst = emptyhead;
while (lst -> next && lst -> next -> next) {
p = lst -> next;
q = p -> next;
p -> next = q -> next;
q -> next = p;
lst -> next = q;
lst = p;
}
return emptyhead -> next;
}
};
25. Reverse Nodes in k-Group
题意:将每k个元素倒序
Given this linked list: ->->->-> For k = , you should return: ->->->-> For k = , you should return: ->->->->
思路:用两个指针来取倒序的一段
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseKGroup(ListNode* head, int k) {
ListNode *emptyhead = new ListNode(-);
emptyhead -> next = head;
ListNode *pre = emptyhead, *cur = emptyhead;
int i = ;
while (cur -> next) {
i++;
cur = cur -> next;
if (i % k == ) {
pre = reverse(pre, cur -> next);
cur = pre;
}
}
return emptyhead -> next;
}
ListNode* reverse(ListNode* pre, ListNode* nxt) {
ListNode *lst, *cur;
lst = pre -> next;
cur = lst -> next;
while (cur != nxt) {
lst -> next = cur -> next;
cur -> next = pre -> next;
pre -> next = cur;
cur = lst -> next;
}
return lst;
} };
29. Divide Two Integers
题意:不用乘除模运算,完成整数乘法,若溢出则输出INT_MAX,向0取整
思路:思路是往下减,一个一个减布星,来移位
class Solution {
public:
int divide(int dividend, int divisor) {
long long res = ;
int flag = ;
if ((dividend < && divisor > ) || (dividend > && divisor < )) {
flag = -;
}
long long m = abs((long long)dividend);
long long n = abs((long long)divisor);
long long base, t;
while (m >= n) {
base = n;
t = ;
while (m >= (base << )) {
base <<= ;
t <<= ;
}
m -= base;
res += t;
}
if (flag == -) return int(-res);
if (res > ) return ;
return res;
}
};
31. Next Permutation
题意:给一个序列,输出字典序下一个的序列
思路:对于已经是字典序的序列特判,输出倒序;其他情况下,
从后往前找到第一个开始减小的元素
1 5 4 3 1
然后从后往前找到第一个比2大的元素,交换它们
1 5 4 1
然后把3之后的序列倒置
1 3 1 2 4 5
嘛拿纸笔画一画就好惹(
class Solution {
public:
void nextPermutation(vector<int>& nums) {
int n = nums.size();
int flag = ;
int last, idx;
for (int i = n - ; i >= ; i--) {
if (nums[i] < nums[i + ]) {
last = nums[i];
idx = i;
flag = ;
break;
}
}
if (flag == ) {
reverse(nums.begin(), nums.end());
} else {
for (int i = n - ; i >= idx + ; i--) {
if (nums[i] > last) {
nums[idx] = nums[i];
nums[i] = last;
break;
}
}
reverse(nums.begin() + idx + , nums.end());
}
return;
}
};
// 1 2 4 5 6 -> 1 2 4 6 5
// 1 2 4 6 5 -> 1 2 5 4 6
// 1 3 4 2 -> 1 4 2 3
// 3 4 2 1 -> 4 1 2 3
46. Permutations
题意:输出全排列
next_permutation 输出从当前排列之后的所有全排列 (所以要 sort 和 do while)
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> res;
sort(nums.begin(), nums.end());
do {
res.push_back(nums);
} while (next_permutation(nums.begin(), nums.end()));
return res;
}
};
56. Merge Intervals
结构体vector的排序姿势……?
为啥cmp不行啊qwq(
struct Interval {
int start;
int end;
Interval() : start(), end() {}
Interval(int s, int e) : start(s), end(e) {}
};
vector<Interval>& intervals;
sort(intervals.begin(), intervals.end(), [](Interval &a, Interval &b) {return a.start < b.start;});
LeetCode || 大杂烩w的更多相关文章
- lucene入门创建索引——(二)
1.程序宏观结构图
- leetCode刷题(将字符串转成W形状的字符串再以Z形字符串输出)
The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...
- [LeetCode] Reconstruct Original Digits from English 从英文中重建数字
Given a non-empty string containing an out-of-order English representation of digits 0-9, output the ...
- [LeetCode] Boom Enemy 炸弹人
Given a 2D grid, each cell is either a wall 'W', an enemy 'E' or empty '0' (the number zero), return ...
- [LeetCode] Russian Doll Envelopes 俄罗斯娃娃信封
You have a number of envelopes with widths and heights given as a pair of integers (w, h). One envel ...
- [LeetCode] Strobogrammatic Number III 对称数之三
A strobogrammatic number is a number that looks the same when rotated 180 degrees (looked at upside ...
- [LeetCode] Word Ladder II 词语阶梯之二
Given two words (start and end), and a dictionary, find all shortest transformation sequence(s) from ...
- [LeetCode] Substring with Concatenation of All Words 串联所有单词的子串
You are given a string, s, and a list of words, words, that are all of the same length. Find all sta ...
- [LeetCode] String to Integer (atoi) 字符串转为整数
Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. ...
随机推荐
- CF 429B B.Working out 四个角递推
B. Working outtime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutpu ...
- 萌新笔记之堆(heap)
前言(萌新感想): 以前用STL的queue啊stack啊priority_queue啊,一直很想懂原理,现在终于课上到了priority_queue,还有就是下周期中考,哈哈,所以写几篇blog总结 ...
- PTA 4-3 二叉树的遍历
//左根右 void InorderTraversal( BinTree BT ) { if(BT) { InorderTraversal(BT->Left); printf(" %c ...
- 微信小程序云开发之云函数的创建与环境配置
云函数的使用与环境配置: 1.创建云函数 右键cloudfunctions文件选择新建Node.js云函数,云函数命名为updateVoice用于修改用户语音数量. 2.安装node.js及npm: ...
- linux定时任务报错mysql: command not found
本人在用docker做镜像的时候,把定时任务打到镜像里,但是执行的时候发现错误日志总是报 sh: mysql: command not found ,然后开始解决问题 1)首先确认镜像有没有装mysq ...
- [题解](最短路)luogu_P5122 Fine Dining
首先理解这里的美味值相当于给你更多时间让你经过这个草垛的, 也就是在经过草垛时可以给你的时间减少w[i],这样能否比最短路不慢 然而我们并不容易知道怎么走才是最好的,所以要想办法避免找这个方案 我们新 ...
- 牛客寒假5-D.炫酷路途
链接:https://ac.nowcoder.com/acm/contest/331/D 题意: 小希现在要从寝室赶到机房,路途可以按距离分为N段,第i个和i+1个是直接相连的,只需要一秒钟就可以相互 ...
- 547 Friend Circles 朋友圈
班上有 N 名学生.其中有些人是朋友,有些则不是.他们的友谊具有是传递性.如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友.所谓的朋友圈,是指所有朋友的集合.给 ...
- Function ereg() is deprecated in
PHP 5.3 ereg() 无法正常使用,提示"Function ereg() is deprecated Error".问题根源是php中有两种正则表示方法,一个是posix, ...
- linux学习笔记汇总
linux 文件系统是采用级层树状的目录结构,采用"/"根目录的方式 目录结构: / 根目录 |---root: 存放root用户相关的文件 ...