创建了网站黄石网站建设黄石
news/
2025/9/23 16:23:56/
文章来源:
创建了网站,黄石网站建设黄石,app开发价格参考,国外室内设计案例网站文章目录 引言复习完全背包问题——买书个人实现 状态转换机——股票买卖V个人实现参考实现 新作两数相除个人实现 新作LRU缓存实现个人实现unordered_map相关priority_queue相关 参考实现自己复现 总结 引言 今天知道拼多多挂掉了#xff0c;难受#xff0c;那实习就是颗粒无… 文章目录 引言复习完全背包问题——买书个人实现 状态转换机——股票买卖V个人实现参考实现 新作两数相除个人实现 新作LRU缓存实现个人实现unordered_map相关priority_queue相关 参考实现自己复现 总结 引言 今天知道拼多多挂掉了难受那实习就是颗粒无收了。整的我有点失神难受可能后面的日子不好过吧没什么钱了然后奖学金评定不一定能够评上 后续好好准备秋招吧实习暂时算是告一段落了也不再去想了加油吧 其实本来主管面就面的不好我不应该在报什么希望怀疑会出现像二面一样的情况觉得免得不好但是最终给你过了不可能的那种毕竟是少数吧兄弟加加油吧我尽力就好了不要再难过了 不要总是心存侥幸 还是得脚踏实地尽可能完成自己的计划。
复习
完全背包问题——买书
上一次分析链接二维背包问题第一次讲买药的背包问题
思路分析
这里暂时没有理解那个转换公式还是使用传统的分析方式再写一遍
个人实现
#include iostreamusing namespace std;const int N 1010,M 5;
int p[M] {0,10,20,50,100};
int n,f[5][N];int main(){cinn;f[0][0] 1;for (int i 1; i 4; i) {for (int j 0; j n; j) {for (int k 0; k * p[i] n; k ) {f[i][j] f[i - 1][j - k * p[i]];}}}coutf[4][n];
}状态转换机——股票买卖V
状态机模型已经做过几道题目了具体链接如下
状态机——股票买卖之前还做过大盗阿福但是没有了不过无所谓。上一次的思路分析
个人实现 状态转换机的关键是确定有哪几种状态然后确定状态转移方程也就是确定了动态规划的方程最终确定最终的结果。 这道题和之前的题目有不同没有了限定股票交易次数所以需要重新考虑一下 这里去除了一个维度但是有一个问题这个冷冻期应该怎么处理感觉像我下面这样处理有问题。然后这里有多重情况应该怎么计算先试试看吧先这样写吧冷冻期不能执行任何操作 这里有一个问题如果某一个状态选中了对应的值那么上一个状态就会影响下一个状态这就不满足动态规划的基本要求了
暂时只能写成这样了关于冷冻状态还不知道怎么处理
#include iostream
#include cstring
using namespace std;const int N 10010,D -1;//定义D状态表示冷冻状态
int f[N][2]; // 0表示没有持有股票1表示持有了股票
int w[N],n;int main(){cinn;for (int i 1; i n 1; i) {cinw[i];}// 向后进行遍历memset(f, size(f),INT_MIN);for (int i 1; i n 1; i) {f[i][0] max(f[i - 1][0],f[i - 1][1] - w[i]);f[i][1] max(f[i - 1][1],f[i - 1][0] w[i]);}// 返回最终结果coutf[n 1][0];
}参考实现
条件是否满足是自动判断的然后自动转移的。 这里的思路和我分析的差不多但是我缺了两部一个是确定状态机的出口还有就是状态机的入口。这里根据这个再重写一下哈还是自己的想法不够理智没有自信。根源在于对立理论的未知始终觉得不够
#include iostream
#include cstring
#include limits.h
using namespace std;const int N 100010;//定义D状态表示冷冻状态
int f[N][3]; // 0表示没有持有股票1表示持有了股票
int w[N],n;int main(){cinn;for (int i 1; i n; i) {cinw[i];}// 向后进行遍历
// memset(f, INT_MIN,size(f));f[0][0] f[0][1] INT_MIN;f[0][2] 0;// 定义入口状态for (int i 1; i n; i) {f[i][0] max(f[i - 1][0],f[i - 1][2] - w[i]);f[i][1] f[i - 1][0] w[i];f[i][2] max(f[i - 1][1],f[i - 1][2]);}// 返回最终结果coutmax(f[n][1],f[n][2]);return 0;
}新作
两数相除
题目链接
个人实现
有以下几个考虑到东西 原来的数据是int类型的但是INT_MIN的绝对值是比INT_MAX大一的所以要使用long long进行存储防止溢出。使用移位运算的增加运算效率进而增加运算效率保存不同倍数的样本然后直接比较大小。
#include iostream
#include limits.h
#include vector
using namespace std;int divide(int x ,int y){// x / ytypedef long long LL;vectorLL exp;LL a abs((LL)x),b abs((LL)y),res 0;for (LL i b; i a; b b) exp.push_back(i);// 判定符号int is_minus 1;if ((x 0 y 0) || (x 0 y 0)) is_minus -1;// 然后从大到小进行遍历保证结果的相似性for (int i exp.size() - 1; i 0 ;i --) {if (a exp[i]) {a - exp[i];res 1ll i;}}if (res INT_MAX) return INT_MAX; if (res INT_MIN) return INT_MIN;if (is_minus -1) return 0 - res;return res;
}int main(){coutdivide(10,3);
}写的还是蛮快的基本思路都是对的然后忘记了取绝对值还有就是移位运算使用了i不是使用1进行移位运算的。
新作LRU缓存实现
题目链接 这道题是今天的面试题难顶我居然没有写出来等会得好好再写一遍有很多方法都没有写出来。
个人实现 这道题我就不卡时间了在面试中这道题我没有想出来但是就算按照我的方法还有很多东西我自己都实现不了这里实现以下我的方法。或者说将我的东西进行查漏补缺一下还是有很多东西不会。 感觉这里要实现双向链表和Hashtable的结合体通过hashtable来实现get和put函数的O1访问通过双向链表来实现对应的最近最久未访问的优先级。 下面这两个方法得好好背背使劲背背不然太难受了
unordered_map相关
count方法相关
map.count(key)1表示元素存在0表示元素不存在
删除元素 map.erase(key) //直接删除对应的元素
#include iostream
#include unordered_map
using namespace std;int main(){unordered_mapint,int s;// 添加元素s[1] 1;s[2] 1;s[3] 1;s[4] 1;// 获取map的元素个数couts.size()endl;// 删除特定的元素s.erase(1);for (auto i : s) {couti.first i.secondendl;}// 访问特定的元素couts[3]endl;couts[6]endl; // 访问不存在的元素默认会返回为零// count方法测试// 元素不存在就返回0元素存在就返回1cout元素存在s.count(3)endl;cout元素不存在s.count(16)endl;}priority_queue相关
声明一个自定义排序函数的优先队列
这个声明自定义一个比较函数的方法写法比较特殊所以需要的好好背一下认真记录一下哎。
#include iostream
#include queue
using namespace std;// 使用结构体声明
struct CustomCompare{
// 两个括号bool operator()(const int lhs, const int rhs) const{return lhs rhs;}
};int main(){// 指定中间体以及对应的比较函数的priority_queueint ,vectorint ,CustomCompare s;s.push(6);s.push(2);s.push(3);while(!s.empty()){couts.top()endl;s.pop();}
}其他的就跟队列差不多所以这里需要好好记录一下哎
参考实现
修改每一个key-value的时间戳然后能够一瞬间找到最小的元素》使用双链表实现 使用双链表进行排序实现这种方式。 整体的实现方式和我的想的差不多还是要重视一下怎么实现。下面贴一下y总的代码实现思路。
class LRUCache {
public:struct Node {int key, val;Node *left, *right;Node(int _key, int _val): key(_key), val(_val), left(NULL), right(NULL) {}}*L, *R;unordered_mapint, Node* hash;int n;void remove(Node* p) {p-right-left p-left;p-left-right p-right;}void insert(Node* p) {p-right L-right;p-left L;L-right-left p;L-right p;}LRUCache(int capacity) {n capacity;L new Node(-1, -1), R new Node(-1, -1);L-right R, R-left L;}int get(int key) {if (hash.count(key) 0) return -1;auto p hash[key];remove(p);insert(p);return p-val;}void put(int key, int value) {if (hash.count(key)) {auto p hash[key];p-val value;remove(p);insert(p);} else {if (hash.size() n) {auto p R-left;remove(p);hash.erase(p-key);delete p;}auto p new Node(key, value);hash[key] p;insert(p);}}
};/*** Your LRUCache object will be instantiated and called as such:* LRUCache* obj new LRUCache(capacity);* int param_1 obj-get(key);* obj-put(key,value);*/作者yxc 链接https://www.acwing.com/activity/content/code/content/405014/ 来源AcWing 著作权归作者所有。商业转载请联系作者获得授权非商业转载请注明出处。
自己复现
时间太晚了大概思路整对了就行了明天抽空再做一下这里给一个半吊子的。
#include iostream
#include queue
#include unordered_map
using namespace std;class LRUCache {
public:struct Node{int key,value;Node* l;Node* r;Node():key(-1),value(-1),l(nullptr),r(nullptr){};Node(int k,int v):key(k),value(v),l(nullptr),r(nullptr){};}*L,*R; // 定义两个伪端点int n;unordered_mapint ,Node* s;LRUCache(int capacity) {n capacity;L new Node();R new Node();L-l R;R-r L;}void remove(Node* t){// 删除非两端端点的插入方法这里删除特定的元素}void insert(Node* t){// 直接在最末尾段插入元素}int get(int key) {// 查看元素是否存在if(s.count(key) 1){// 元素存在,返回对应的值int res s[key]-value;remove(s[key]);insert(s[key]);return res;}else{// 元素不存在的话直接返回-1return -1;}}void put(int key, int value) {// 判定元素的是否存在if (s.count(key) 1){s[key]-value value;remove(s[key]);insert(s[key]);}else{// 元素不存在直接加入// 判定是否爆表auto p new Node(key,value);if (s.size() n){s.erase(L-r-key); //删除元素并添加的s[key] p;// 插入对应的元素}}}
};int main(){}总结
其实之前的面试已经体现出我有一个很大的问题了就是不会的语言的基础特性无论是java还是C都是没背过今天的面试应该也是要凉的因为很多基础的特性都不会没有了解过。这里只是知道怎么用但是还远远不够所以需要好好背一下后面这部分东西要抓紧了解pdd我永远的痛呀秋招应该不会去的因为有竞业协议进去了毕竟职业生涯就终结了。不想了继续看吧。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/913144.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!