-
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;
}
’
- 'unsigned* reversestring(string str)
leetcode
最新推荐文章于 2024-08-10 16:13:14 发布