• Leetcode hot 100


    双指针

    283.移动零

    1. class Solution {
    2. public:
    3. void moveZeroes(vector<int>& nums) {
    4. int cnt = 0;
    5. for(vector<int>::iterator it = nums.begin(); it != nums.end(); ){
    6. if(*it == 0) it = nums.erase(it),cnt++;
    7. else it++;
    8. }
    9. while(cnt--){
    10. nums.push_back(0);
    11. }
    12. }
    13. };

    11.盛水最多的容器

    1. class Solution {
    2. public:
    3. int maxArea(vector<int>& height) {
    4. int l = 0, r = height.size()-1;
    5. int ans = 0;
    6. while(l < r){
    7. int t = min(height[l], height[r]) * (r-l) ;
    8. ans = max(ans, t);
    9. if(height[l] < height[r]) l++;
    10. else r--;
    11. }
    12. return ans;
    13. }
    14. };

    53. 最大子数组和

    1. class Solution {
    2. public:
    3. int maxSubArray(vector<int>& nums) {
    4. return maxx(nums, 0, nums.size() - 1);
    5. }
    6. int maxx(vector<int>& nums, int l, int r) {
    7. if (l > r) return 0;
    8. if (l == r) {
    9. return nums[l];
    10. }
    11. int mid = (l + r) / 2;
    12. int ret = maxx(nums, l, mid);
    13. if(mid + 1 <= r)ret = max(ret, maxx(nums, mid + 1, r));
    14. int i = mid-1, j = mid+1;
    15. int tmp = nums[mid], maxone = tmp;
    16. while ( i >= l ) {
    17. tmp += nums[i];
    18. if (tmp >= maxone)
    19. maxone = max(maxone, tmp);
    20. i--;
    21. }
    22. tmp = maxone;
    23. while ( j <= r ) {
    24. tmp += nums[j];
    25. if ( tmp >= maxone)
    26. maxone = max(maxone, tmp);
    27. j++;
    28. }
    29. return max(ret, maxone);
    30. }
    31. };

    56. 合并区间

    1. class Solution {
    2. public:
    3. static bool cmp(vector<int> a, vector<int> b){
    4. if(a[0] != b[0]) return a[0] < b[0];
    5. if(a[1] != b[1]) return a[1] < b[1];
    6. return false;
    7. }
    8. vector<vector<int>> merge(vector< vector > intervals) {
    9. vector<vector<int>> ret ;
    10. // vector<int> tmp;
    11. sort(intervals.begin(), intervals.end(), cmp);
    12. int l = intervals[0][0], r = intervals[0][1];
    13. for(int i = 1; i< intervals.size(); i++){
    14. // cout<<intervals[i][0]<<' '<<intervals[i][1]<<endl;
    15. if(intervals[i][0] <= r) r = max(intervals[i][1], r);
    16. else {
    17. ret.push_back({l, r});
    18. l = intervals[i][0];
    19. r = intervals[i][1];
    20. }
    21. }
    22. ret.push_back({l, r});
    23. return ret;
    24. }
    25. };

    160. 相交链表

    1. /**
    2. * Definition for singly-linked list.
    3. * struct ListNode {
    4. * int val;
    5. * ListNode *next;
    6. * ListNode(int x) : val(x), next(NULL) {}
    7. * };
    8. */
    9. class Solution {
    10. public:
    11. ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
    12. ListNode* p = headA, *q = NULL;
    13. int len1 = 0,len2 = 0;
    14. while(p){
    15. len1++;
    16. p = p->next;
    17. }
    18. p = headB;
    19. while(p){
    20. len2 ++;
    21. p = p->next;
    22. }
    23. p = headA;
    24. q = headB;
    25. if(len1 > len2) {
    26. int n = len1 - len2;
    27. while(n--) p = p->next;
    28. }
    29. else{
    30. int n = len2 - len1;
    31. while(n--) q = q->next;
    32. }
    33. while(p != q){
    34. p = p->next;
    35. q = q->next;
    36. }
    37. return p;
    38. }
    39. };

    141. 环形链表

    1. /**
    2. * Definition for singly-linked list.
    3. * struct ListNode {
    4. * int val;
    5. * ListNode *next;
    6. * ListNode(int x) : val(x), next(NULL) {}
    7. * };
    8. */
    9. class Solution {
    10. public:
    11. bool hasCycle(ListNode *head) {
    12. set<ListNode *> st;
    13. ListNode *p = head;
    14. while(p != NULL){
    15. if(st.find(p) == st.end()) st.insert(p);
    16. else return true;
    17. p = p->next;
    18. }
    19. return false;
    20. }
    21. };

    142. 环形链表 II

    1. /**
    2. * Definition for singly-linked list.
    3. * struct ListNode {
    4. * int val;
    5. * ListNode *next;
    6. * ListNode(int x) : val(x), next(NULL) {}
    7. * };
    8. */
    9. class Solution {
    10. public:
    11. ListNode *detectCycle(ListNode *head) {
    12. map<ListNode *, int> mp;
    13. ListNode * ret = head;
    14. int idx = 0;
    15. while(ret != NULL){
    16. cout<<ret<<' ';
    17. if(mp.find(ret) != mp.end())
    18. return ret;
    19. else
    20. mp[ret] = idx++ ;
    21. ret = ret->next;
    22. }
    23. return NULL;
    24. }
    25. };



    2. 两数相加

    1. /**
    2. * Definition for singly-linked list.
    3. * struct ListNode {
    4. * int val;
    5. * ListNode *next;
    6. * ListNode() : val(0), next(nullptr) {}
    7. * ListNode(int x) : val(x), next(nullptr) {}
    8. * ListNode(int x, ListNode *next) : val(x), next(next) {}
    9. * };
    10. */
    11. class Solution {
    12. public:
    13. ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
    14. ListNode* p, *q, *tmp, *tmp2;
    15. p = l1;
    16. q = l2;
    17. int c = 0;
    18. tmp2 = p;
    19. while(p != NULL && q!=NULL){
    20. tmp = p;
    21. p->val = p->val + q->val + c;
    22. c = p->val / 10;
    23. p->val %= 10;
    24. p = p->next;
    25. q = q->next;
    26. }
    27. while(p != NULL){
    28. tmp = p;
    29. p->val += c;
    30. c = p->val / 10;
    31. p->val %= 10;
    32. p = p->next;
    33. }
    34. if(q!=NULL){
    35. tmp->next = q;
    36. }
    37. while(q != NULL){
    38. tmp = q;
    39. q->val += c;
    40. c = q->val / 10;
    41. q->val %= 10;
    42. q = q->next;
    43. }
    44. if(c) {
    45. ListNode * x = new ListNode(c, NULL);
    46. tmp->next = x;
    47. }
    48. tmp = reverse(tmp2);
    49. tmp2 = reverse(tmp);
    50. return tmp2;
    51. }
    52. ListNode* reverse(ListNode* l1){
    53. ListNode* p, *q, *tmp;
    54. p = l1 ->next;
    55. q = l1;
    56. q->next = NULL;
    57. while(p != NULL){
    58. tmp = p->next;
    59. p->next = q;
    60. q = p;
    61. p = tmp;
    62. }
    63. return q;
    64. }
    65. };

  • 相关阅读:
    4.9每日一题(多元抽象复合函数求二阶偏导)
    7.pandas缺失值处理(表格数据处理)
    三十二、【进阶】hash索引结构
    黑苹果引导介绍篇
    FinalIK反向动力学插件学习
    【iMessage苹果相册推】 内部网关协议(InternetwayProtocol)常用的是RIP和OSPE
    《微信小程序》初识微信小程序
    SpringBoot采用Dynamic-Datasource方式实现多JDBC数据源
    房产政策松绑,VR看房助力市场回春
    ChatGPT的原理
  • 原文地址:https://blog.csdn.net/m0_54674275/article/details/132342102