448
法一:
class Solution {
public:
vector<int> findDisappearedNumbers(vector<int>& nums) {
int nums_len = nums.size();
vector<int> result;
int *bucket = new int[nums_len+1]();
for(int i = 0; i < nums_len; i++)
{
bucket[nums[i]] = 1;
}
for(int j = 1; j <= nums_len; j++)
{
if(!bucket[j])
result.push_back(j);
}
delete bucket;
return result;
}
};
法二:把各个数字是否存在映射到对应坐标数下的正负号,这种做法不改变数的标量大小,只是符号,最后判断符号得出结果。
class Solution {
public:
vector<int> findDisappearedNumbers(vector<int>& nums) {
int len = nums.size();
for(int i=0; i<len; i++) {
int m = abs(nums[i])-1; // index start from 0
nums[m] = nums[m]>0 ? -nums[m] : nums[m];
}
vector<int> res;
for(int i = 0; i<len; i++) {
if(nums[i] > 0) res.push_back(i+1);
}
return res;
}
};
414
法一:使用set自动排序
class Solution {
public:
int thirdMax(vector<int>& nums) {
set<int> order;
int nums_len = nums.size();
for(int i = 0; i < nums_len; i++)
{
order.insert(nums[i]);
}
int count = order.size();
int result;
set<int>::iterator rit;
for (rit = order.begin(); rit != order.end(); ++rit)
{
if(count == 3)
{
return *rit;
}
if(count > 0)
result = *rit;
count--;
}
if(count <= 0)
return result;
}
};
法二:牛逼简洁的代码
int thirdMax(vector<int>& nums) {
set<int> top3;
for (int num : nums) {
top3.insert(num);
if (top3.size() > 3)
top3.erase(top3.begin());
}
return top3.size() == 3 ? *top3.begin() : *top3.rbegin();
}
法三:
int thirdMax(vector<int>& nums) {
set<int> top3;
for (int num : nums)
if (top3.insert(num).second && top3.size() > 3)
top3.erase(top3.begin());
return top3.size() == 3 ? *top3.begin() : *top3.rbegin();
}
在这里需要说明for循环的集中用法:
要注意后面的for(:)是lamda表达式,是并发的,结果要注意。
#include <algorithm>
#include <vector>
//
int nArray[] = {0, 1, 2, 3, 4, 5};
std::vector<int> vecNum(nArray, nArray + 6);
CString strText;
// 第一种用法:最原始的语法(用下标)
for (size_t i = 0; i < vecNum.size(); ++i)
{
strText.Format("%d", nArray[i]);
AfxMessageBox(strText);
}
// 第二种用法:最原始的语法(用迭代器)
for (auto it = vecNum.begin(); it != vecNum.end(); ++it)
{
strText.Format("%d", *it);
AfxMessageBox(strText);
}
// 第三种用法:简化数组遍历语法(从vs2008开始支持)
for each(auto item in vecNum)
{
strText.Format("%d", item);
AfxMessageBox(strText);
}
// 第四种用法:STL函数
std::for_each(vecNum.begin(), vecNum.end(), [](int item){
CString strText;
strText.Format("%d", item);
AfxMessageBox(strText);
});
// 第五种用法:C++11新增加的(VS2012支持)
for(auto item : vecNum)
{
strText.Format("%d", item);
AfxMessageBox(strText);
}