【406】Queue Reconstruciton by Height
class Solution {
public:
vector<pair<int, int>> reconstructQueue(vector<pair<int, int>>& people) {
vector<pair<int, int>>result;
if (people.empty())
return result;
sort(people.begin(), people.end(), compare);
for(int i=0;i<people.size();i++)
{
int pos = people[i].second;
result.insert(result.begin() + pos, people[i]);
}
return result;
}
bool compare(const pair<int, int>&a,const pair<int,int>&b)
{
if (a.first == b.first)
return a.second < b.second;
else return a.first < b.first;
}
};
class Solution {
public:
int singleNonDuplicate(vector<int>& nums) {
int i;
for(i=0;i<nums.size()/2;i+=2)
{
if(nums[i]+nums[nums.size()-1-i]!=nums[i+1]+nums[nums.size()-2-i])
break;
}
if(nums[i]<nums[i+1])
return nums[i];
else return nums[nums.size()-1-i];
}
};
这个方法没有满足log(n)的时间复杂度要求;
第二个方法:
class Solution {
public:
int singleNonDuplicate(vector<int>& nums) {
int i=nums.size()/2;
int start=0;
int end=nums.size()-1;
while(start<end)
{
if(nums[i]==nums[i-1])
{
if((i-start)%2==1)
{
start=i+1;i=(start+end)/2;continue;
}
else
{
end=i;i=(start+end)/2;continue;
}
}
if(nums[i]==nums[i+1])
{
if((i-start)%2==1)
{
end=i-1;i=(start+end)/2;continue;
}
else
{
start=i;i=(start+end)/2;continue;
}
}
break;
}
return nums[i];
}
};
然而两个方法运行时间的都是6ms。。。很慢。。。。
class Solution {
public:
int findBottomLeftValue(TreeNode* root) {
queue<TreeNode*>q;
q.push(root);
int result;
while(!q.empty())
{
TreeNode* p = q.front();
q.pop();
result = p->val;
if (p->right != NULL) q.push(p->right);
if (p->left != NULL) q.push(p->left);
}
return result;
}
};
【521】Longest UNcommon Subsequence I
class Solution {
public:
int findLUSlength(string a, string b) {
int sa=a.length();
int sb=b.length();
if(sa>sb) return sa;
if(sb>sa) return sb;
else if(a==b)
return -1;
else return sa;
}
};
【637】Average of Levels in Binary Tree
class Solution {
public:
vector<double> averageOfLevels(TreeNode* root) {
vector<double> result;
if (root == NULL) return result;
queue<TreeNode*> q;
q.push(root);
while(!q.empty())
{
int num = q.size();
double total = 0.0;
for(int i=0;i<num;i++)
{
TreeNode* p = q.front();
q.pop();
if (p->left != NULL) q.push(p->left);
if (p->right != NULL) q.push(p->right);
total += p->val;
}
result.push_back(total / num);
}
return result;
}
};