##构造n对括号的全部有效组合
###思路
递归构造
- 左括号:只要还有左括号,则加入
- 右括号:只要右括号比左括号剩余的还多,则不构成非法,加入
###Code
##构造n对括号的全部有效组合
###思路
递归构造
###Code
##WeChat Live Coding
实验室人的TST计划——微信面试题,一个小时内做出如下5道题,在collabedit上在线coding
拿来学习一下。。。啦啦啦啦啦啦
###思路
##Sort
从左开始与pivot比较,左边始终是<=pivot的元素,使用随机化pivot版本
int partition(int arr[], int begin, int end){
int pivot_index = rand() % (end - begin + 1) + begin;
swap(arr[pivot_index],arr[end]);
int pivot = arr[end];###Reverse list
反转list,使用递归方式
![][1]
如图所示,h为已经经过递归反转过的链表头,在递归之前保存的q指针已经是反转之后的尾指针,修改p指针为新的尾节点,返回h节点
###Code
###Pointer to pointer
在删除链表的节点的时候,需要考虑是否删除的是头节点的问题,要保存前驱结点的信息,今天看到了一个巧妙地用法,利用二级指针
Code
/*
struct ListNode{
int val;
ListNode* next;##Struct traits
在《Inside The C++ Object Model》这本书中有一个例子很有趣,就是在struct中放置一个一个元素的char数组,在运行时动态的构造可变长数组,如下:
struct mumble{
/*stuff*/
char pc[1];
};
typedef struct mumble* mumble_ptr;
mumble_ptr resize_mum_t(int size){###Return value optimization
我们知道,在函数内如果需要以value方式返回对象,那么需要生成临时匿名对象,然后以这个临时对象去通过copy构造函数生成新的对象,最后调用析构函数销毁对象
A method(){
...
A temp;
...
return temp;
}##Heap sort
#include <iostream>
#include <vector>
#include <algorithm>###auto_ptr的实现
#include <iostream>
#include <vector>
using namespace std;
template<class T>