leetcode

  • leetcode_60 Permutation Sequence

    • 循环,每次确定第一位的数字;
    • 全排列的递归实现的顺序和题目要求的顺序不同。
    • leetcode_46 Permutations,全排列,不要求顺序,元素各不相同,岔路口有多种选择,swap使用的也是岔路口;如果有元素相同的话,需要固定位置上只出现互不相同的元素。
    • leetcode_47 Permutations2,全排列,有重复,可以用map存下每个元素出现的次数,在回溯的时候,岔路口的选择使用遍历maps中的元素。实际上maps就是起到一个判断某个元素是否访问过的作用。
  • Rotated Sorted Array

    • 查找,leetcode_33 无重复
    • 查找,leetcode_81 有重复;如果mid和left和right对应的值相等,就采用顺序查找;正常的话使用二分查找。
    • 最小数字,leetcode_153,在数组中找到最小数字
    • 最小数字2,leetcode_154,有重复
  • 最大矩形

    • leetcode_84,用栈的方法,栈内排序从小到大
    • leetcode_85,最大包含数字1的矩形
    • 类似的从一维数组到二维的扩展,还有,一维数组求连续子数组最大和,矩阵中和最大的矩阵块,固定两个行,将对应列的数字加起来,然后用求一维数组连续子数组最大和的方法求解;
  • 最大蓄水的面积

    • 两个指针,从外到里,如果某个指针对应的高度低,就向里移动这个指针,同时进行面积比较。
  • Max Consecutive Ones 3

    • leetcode_1004,滑动窗口,巧妙的解决方法
    • leetcode_3,Longest Substring Without Repeating Characters,滑动窗口
  • 链表反转

    • 单链表反转,递归,非递归

      • 递归

      • 'ListNode* reverseddigui(ListNode* pre,ListNode* p)
        {
        if (p->next == nullptr)
        {
        p->next = pre;
        return p;
        }
        ListNode* next = p->next;
        p->next = pre;
        return reverseddigui(p, next);
        }
        ListNode* reversedList(ListNode* head)
        {
        if (head == nullptr)
        return head;
        return reverseddigui(nullptr, head);
        }

      • 非递归

      • 'ListNode* reversedList(ListNode* head)
        {
        ListNode* pre = nullptr;
        ListNode* p = head;
        ListNode* reversedHead = nullptr;
        while §
        {
        ListNode* next = p->next;
        if (p->next == nullptr)
        reversedHead = p;
        p->next = pre;
        pre = p;
        p = next;
        }
        return reversedHead;
        }

    • 链表隔一反转,递归,非递归

      • 递归

      • `ListNode* reversedList( ListNode* p)
        {
        if (p==nullptr || p->next == nullptr)
        {
        return p;
        }
        ListNode* pnext = p->next;
        ListNode* pnextnext = pnext->next;
        pnext->next = p;
        p->next = reversedList(pnextnext);
        return pnext;
        }

      • 非递归

      • 'ListNode* reversedList0(ListNode* head)
        {
        ListNode* head0 = new ListNode(0);
        head0->next = head;
        ListNode* pre = head0;
        ListNode* p = head;

        while (p&&p->next)
        {
        ListNode* next = p->next;
        ListNode* nextnext = next->next;
        pre->next = next;
        next->next = p;
        pre = p;
        p = nextnext;
        }
        if §
        pre->next = p;
        return head0->next;
        }’

  • 如何把一个字符串(存储着16进制的数字字符,定长32),转换成char类型的数组,一个char里可以放两个16进制

    • 'unsigned* reversestring(string str)
      {
      unsigned res[16];
      int index = 0;
      for (int i = 0; i < str.size(); i = i + 2)
      {
      char c1 = str[i];
      char c2 = str[i + 1];
      unsigned n1 = c1 - ‘0’;
      unsigned n2 = c2 - ‘0’;
      for (int i = 0; i < 4; i++)
      {
      n1 = n1 << 1;
      }
      res[index] = n1 | n2;
      index++;
      }
      return res;
      }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值