早上完成了Golang的一部分内容,还在学习ing;
下午面试去了,晚上面试复盘下,加强一些不会和遗漏的细节;
小偷:198. House Robber - 力扣(LeetCode)
//可以优化为
class Solution {
public:
int rob(vector<int>& nums) {
if(nums.empty()) return 0;
if(nums.size()==1) return nums[0];
if(nums.size()==2) return max(nums[0],nums[1]);
vector<int> dp(nums.size()+1,0);
dp[0]=nums[0];
dp[1]=max(nums[0],nums[1]);
for(int i=2;i<nums.size();i++){
dp[i]=max(dp[i-2]+nums[i],dp[i-1]);
}
return dp[nums.size()-1];
}
};
//笔试时写出来的代码,heng shi
class Solution {
public:
int rob(vector<int>& nums) {
if(nums.empty()) return 0;
if(nums.size()==1) return nums[0];
if(nums.size()==2) return max(nums[0],nums[1]);
vector<vector<int>> dp(nums.size()+1,vector<int>(2,0));
dp[0][0]=nums[0];
dp[0][1]=0;
for(int i=1;i<nums.size();i++){
dp[i][0]=max(dp[i-1][1]+nums[i],dp[i-1][0]);
dp[i][1]=dp[i-1][0];
}
return max(dp[nums.size()-1][0],dp[nums.size()-1][1]);
}
};
C++指针相关
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//这里要注意,之所以错误是因为,p是形参,也就是复制了传入的指针里面保存的地址
//所以如果你原来指针指向NULL,传入时,不是传入你的指针,而是你的指针指向的值
//所以是错误的啊!
void test_error(char *p,int num){
*p = (char*)malloc(sizeof(char)*num);
}
void test(char**p,int num){
*p = (char*)malloc(sizeof(char)*num);
}
int main(){
char *n=NULL;
test(&n,100);
strcpy(n,"hello");
printf("%s\n",n);
return 0;
}
C++中vector和map用迭代器删除元素的代码
无论是vector和map的erase,当你想要有传回的迭代器时,参数都是传入的迭代器
#include <iostream>
#include <map>
using namespace std;
//map删除的主要思路是,用了erase后会返回接下来的迭代器
//vector也一样
int main() {
map<int, string> m{{1, "one"}, {2, "two"},{3, "three"}, {4, "four"}, {5, "five"}};
for(auto iter = m.begin(); iter != m.end();)
{
if (iter->first == 4)
{
iter = m.erase(iter);
}
else
++iter;
}
for(auto iter = m.begin(); iter != m.end(); iter++)
{
std::cout << iter->first <<" " << iter->second << std::endl;
}
std::cout << "Hello, World!" << std::endl;
return 0;
}
int main()
{
vector<int> myvector;
for (int i = 1; i <= 7; i++)
myvector.push_back(i);
for (auto iter = myvector.begin(); iter != myvector.end(); )
{
if (*iter > 3)
{
cout << "num is " << *iter << endl;
iter=myvector.erase(iter);
}
else
{
iter++;
}
}
}
C++内存对齐(额,高强度理解,额)
原则1:就是拿最大的元素去对齐,原则2就是整体是拿最大的元素去对齐