11.13
leetcode
328. 奇偶链表
难度中等327
给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。
请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。
示例 1:
输入: 1->2->3->4->5->NULL
输出: 1->3->5->2->4->NULL
示例 2:
输入: 2->1->3->5->6->4->7->NULL
输出: 2->3->6->7->1->5->4->NULL
说明:
- 应当保持奇数节点和偶数节点的相对顺序。
- 链表的第一个节点视为奇数节点,第二个节点视为偶数节点,以此类推。
解答:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* oddEvenList(ListNode* head) {
if(!head || !head->next)return head;
auto oh = head, ot = oh;
auto eh = head->next, et = eh;
for(auto p = head->next->next; p;){
ot = ot->next = p;
p = p->next;
if(p){
et = et->next = p;
p = p->next;
}
}
ot->next = eh;
et->next = NULL;
return oh;
}
};
387. 字符串中的第一个唯一字符
难度简单288
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
示例:
s = "leetcode"
返回 0
s = "loveleetcode"
返回 2
提示:你可以假定该字符串只包含小写字母。
解答:
class Solution {
public:
int firstUniqChar(string s) {
map<int, int>cnt;
for(int i = 0; i < s.size(); i++)cnt[s[i]]++;
for(int i = 0; i < s.size(); i++){
if(cnt[s[i]] == 1){
return i;
break;
}
}
return -1;
}
};
29. 两数相除
难度中等454
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。
返回被除数 dividend 除以除数 divisor 得到的商。
整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2
示例 1:
输入: dividend = 10, divisor = 3
输出: 3
解释: 10/3 = truncate(3.33333..) = truncate(3) = 3
示例 2:
输入: dividend = 7, divisor = -3
输出: -2
解释: 7/-3 = truncate(-2.33333..) = -2
提示:
- 被除数和除数均为 32 位有符号整数。
- 除数不为 0。
- 假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。本题中,如果除法结果溢出,则返回 231 − 1。
解答;快速幂思想
class Solution {
public:
int divide(int x, int y) {
typedef long long LL;
vector<LL>exp;
bool flag = false;
LL res = 0;
if(x > 0 && y < 0 || x < 0 && y > 0)flag = true;
LL a = abs((LL)x), b = abs((LL)y);
for(LL i = b; i <= a; i = i + i)exp.push_back(i);
for(int i = exp.size() - 1; i >= 0; i--){
if(a >= exp[i]){
a = a - exp[i];
res += 1ll << i;
}
}
if(flag)res = -res;
if(res > INT_MAX || res < INT_MIN)return INT_MAX;
return res;
}
};

浙公网安备 33010602011771号