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) }};