82.删除排序链表中的重复元素-ii

/**
* 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 *deleteDuplicates(ListNode *head) {
if (!head || !head->next)
return head;
ListNode *front = head->next;
ListNode *behind = new ListNode(0, head);
int temp = head->val;
head = behind;
while (front) {
if (front->val == temp) {
if (behind->next->val != temp) {
behind = behind->next;
}
behind->next = front->next;
front = front->next;
} else {
temp = front->val;
front = front->next;
if (front && temp != front->val)
behind = behind->next;
}
}
return head->next;
// 166/166 cases passed (4 ms)
// Your runtime beats 93.62 % of cpp submissions
// Your memory usage beats 93.04 % of cpp submissions (10.7 MB)
}
};

15.三数之和

class Solution {
public:
vector<vector<int>> threeSum(vector<int> &nums) {
if (nums.size() < 3)
return {};
sort(nums.begin(), nums.end());
vector<vector<int>> ans;
for (int i = 0; i < nums.size() - 2;) {
int left = i + 1, right = nums.size() - 1;
while (left < right) {
if (nums[i] + nums[left] + nums[right] > 0) {
right--;
} else if (nums[i] + nums[left] + nums[right] < 0) {
left++;
} else {
ans.push_back({nums[i], nums[left], nums[right]});
int temp = nums[left];
while (left < right && temp == nums[left])
left++;
}
}
int temp = nums[i];
while (i < nums.size() - 2 && temp == nums[i])
i++;
}
return ans;
// 318/318 cases passed (72 ms)
// Your runtime beats 73.27 % of cpp submissions
// Your memory usage beats 94.2 % of cpp submissions (19.3 MB)
}
};