213 House Robber II
class Solution {
public:
int rob(vector<int>& nums) {
int len=nums.size();
if (len==0) return 0;
if (len==1) return nums[0];
vector<int>f;
f.resize(len);
vector<int>g;
g.resize(len);
int ans=-INT_MAX;
int st1=0,ed1=len-2;
int st2=1,ed2=len-1;
for(int i=st1;i<=ed1;i++)
{
int tmpmax = -1;
for(int j=st1;j<=i-2;j++)
if (f[j]>tmpmax) tmpmax=f[j];
if (tmpmax==-1) f[i]=nums[i];
else f[i]=nums[i]+tmpmax;
if (f[i]>ans) ans=f[i];
}
for(int i=st2;i<=ed2;i++)
{
int tmpmax = -1;
for(int j=st2;j<=i-2;j++)
if (g[j]>tmpmax) tmpmax=g[j];
if (tmpmax==-1) g[i]=nums[i];
else g[i]=nums[i]+tmpmax;
if (g[i]>ans) ans=g[i];
}
return ans;
}
};
class Solution {
public:
TreeNode* sortedListToBST(ListNode* head) {
if (head==NULL) return NULL;
vector<int> nums;
ListNode* p = head;
while (p!=NULL)
{
nums.push_back(p->val);
p=p->next;
}
return sortedArrayToBST(nums);
}
TreeNode* sortedArrayToBST(vector<int>& nums) {
if (nums.size()==0) return NULL;
TreeNode* tmp = new TreeNode(0);
if (nums.size() == 1)
{
tmp->val = nums[0];
return tmp;
}
else
{
int mid = nums.size()/2;
tmp->val = nums[mid];
vector<int>nleft;
vector<int>nright;
nleft.clear();nright.clear();
for(int i=0;i<mid;i++)
nleft.push_back(nums[i]);
for(int i=mid+1;i<nums.size();i++)
nright.push_back(nums[i]);
tmp->left = sortedArrayToBST(nleft);
tmp->right = sortedArrayToBST(nright);
}
return tmp;
}
};