344.反转字符串class Solution { public: void reverseString(vector<char> &s) { for (int i = 0; i < s.size() / 2; i++) { char temp = s[i]; s[i] = s[s.size() - 1 - i]; s[s.size() - 1 - i] = temp; } // 477/477 cases passed (12 ms) // Your runtime beats 94.86 % of cpp submissions // Your memory usage beats 87.91 % of cpp submissions (22.5 MB) /*for (int i = 0, j = s.size() - 1; i < s.size() / 2; i++, j--) { s[i] ^= s[j]; s[j] ^= s[i]; s[i] ^= s[j]; }*/ // 477/477 cases passed (20 ms) // Your runtime beats 54.54 % of cpp submissions // Your memory usage beats 75.1 % of cpp submissions (22.5 MB) //*利用位运算实现swap,感觉效率也不是很高== //*^ 按位异或 //*1 ^ 1 = 0 1 ^ 0 = 1 0 ^ 1 = 1 0 ^ 0 = 0 }}; 557.反转字符串中的单词-iiiclass Solution { public: string reverseWords(string s) { int i = 0, j = 0; for (; j < s.length(); j++) { if (s[j] == ' ') { for (int k = i; k < i + (j - i) / 2; k++) { swap(s[k], s[j - 1 - k + i]); } i = j + 1; } } for (int k = i; k < i + (j - i) / 2; k++) { swap(s[k], s[j - 1 - k + i]); } return s; // 29/29 cases passed (8 ms) // Your runtime beats 92.23 % of cpp submissions // Your memory usage beats 98.21 % of cpp submissions (9.2 MB) //*调试了三次,成绩都很高感觉有点太简单了== }}; 876.链表的中间结点/** * 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 *middleNode(ListNode *head) { /*ListNode *temp1 = head; ListNode *temp2 = head; int num = 0; while (temp1) { temp1 = temp1->next; num++; if (!(num % 2)) temp2 = temp2->next; } return temp2;*/ // 36/36 cases passed (0 ms) // Your runtime beats 100 % of cpp submissions // Your memory usage beats 85.58 % of cpp submissions (6.8 MB) //*参考快慢指针,链表的迭代也设置为快慢两个部分 ListNode *temp1 = head; ListNode *temp2 = head; while (temp1 && temp1->next) { temp1 = temp1->next->next; temp2 = temp2->next; } return temp2; // 36/36 cases passed (0 ms) // Your runtime beats 100 % of cpp submissions // Your memory usage beats 86.9 % of cpp submissions (6.8 MB) //*连num都不用设置 }}; 19.删除链表的倒数第-n-个结点/** * 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: // int cur = 0; ListNode *removeNthFromEnd(ListNode *head, int n) { if (head->next == nullptr) return nullptr; ListNode *temp = head; ListNode *ans = new ListNode(0, head); head = ans; while (temp) { temp = temp->next; if (!n) ans = ans->next; n = n > 0 ? n - 1 : 0; } ListNode *del = ans->next; ans->next = ans->next->next ? ans->next->next : nullptr; delete del; return head->next; // 208/208 cases passed (4 ms) // Your runtime beats 76.92 % of cpp submissions // Your memory usage beats 93.63 % of cpp submissions (10.3 MB) //*被特殊情况搞得心烦意乱,没想到最特殊的那个只要单独拎出来就好了==(双指针法) /*if (!head) return NULL; head->next = removeNthFromEnd(head->next, n); cur++; if (n == cur) { ListNode *next = head->next;// delete head; //加上垃圾回收 return next; } return head;*/ // 208/208 cases passed (0 ms) // Your runtime beats 100 % of cpp submissions // Your memory usage beats 7.88 % of cpp submissions (10.5 MB) //我淦,递归法只要5行,缺点是没有垃圾回收,就算我加上了垃圾回收空间复杂度也没降下来,不知道为什么 }};