电子商务网站的开发方式有哪三种青岛百度seo代理
文章目录
- LeetCode 练习随笔
- 力扣上的题目和 OJ题目相比不同之处?
- 定义问题
- 排序问题
- 统计问题
- 其他

LeetCode 练习随笔
做题环境 C++
中等题很值,收获挺多的
不会的题看题解,一道题卡1 h +,多来几道,时间上耗不起。
力扣上的题目和 OJ题目相比不同之处?
一开始上手力扣不习惯,OJ 的题目提交的是完整代码,力扣上的C++只提交目标函数代码,比如某个题目你只需要完成topKFrequent(nums,k)
这个函数。
class Solution {vector<int> topKFrequent(vector<int>& nums, int k) {}
};
这也就意味着程序设计的输入不需要自己额外设计了,同时限制了你数据的输入和返回内容的格式。
多亏了oj许多来自力扣的题并补全了完整代码(目标函数部分空缺),渐渐习惯了编写目标函数的答题习惯。
定义问题
-
在哪定义结构体?
有两个位置可写:
1)类里面,讲究的话写在private中,这里就不讲究了。
class Solution { public:struct node{int data; };vector<int> topKFrequent(vector<int>& nums, int k) {} };
2)顶部区域
struct node{int data; };class Solution { public:struct node{int data; };vector<int> topKFrequent(vector<int>& nums, int k) {} };
-
在哪定义全局变量?
1)顶部区域
#include<algorithm> int a =3; class Solution { public:vector<int> topKFrequent(vector<int>& nums, int k) {vector<int>v;v.push_back(a); return v;} };
2)换个方式,传参方式改为引用
很多全局变量是可以被替代的,比如希望值被修改并返回到原来作用域,但返回值位置紧张。
暴力时,全局变量开大数组还是有点用处的。
-
在哪定义头文件?
一般是全面的,多虑了。
下面这种做题区域顶部写头文件试过,编译通过。
#include<algorithm>class Solution { public:vector<int> topKFrequent(vector<int>& nums, int k) {} };
排序问题
-
vector 存入结构体怎么自定义比较规则?
1)自定义规则为结构体形式(优先队列也可用)
class Solution {public:typedef struct node{int data;int sum;} ll; // static bool cmp(ll a, ll b) // { // return a.sum > b.sum; // }struct CompareBySumDesc{bool operator()( ll a, ll b) {return a.sum > b.sum;}};vector<int> topKFrequent(vector <int> &nums,int k){vector<ll>v;//...//vector排序sort(v.begin(),v.end(),CompareBySumDesc()); // sort(v.begin(),v.end(),cmp);//...return res;}};
2)自定义规则为静态函数(简单)
class Solution {public:typedef struct node{int data;int sum;} ll;static bool cmp(ll a, ll b){return a.sum > b.sum;}// struct CompareBySumDesc // { // bool operator()(const ll a, const ll b) const // { // return a.sum > b.sum; // } // };vector<int> topKFrequent(vector <int> &nums,int k){vector<ll>v;//...//vector排序 // sort(v.begin(),v.end(),CompareBySumDesc());sort(v.begin(),v.end(),cmp);//...return res;}};
-
vector 存入结构体怎么逆置?
用 stack。
-
存入结构体的 priority_queue 怎么自定义比较规则?
给 ll 按照 sum 排序
class Solution { public:typedef struct node{int data;int sum;} ll;//试过了,static 函数行不通,只能 struct cmp{bool operator()( ll a, ll b){return a.sum > b.sum;}};void f(){priority_queue<ll, vector<ll>, cmp> pq;}; int main() {Solution().f();return 0; }
//默认降序//没有结构体,升序 priority_queue <int,vector<int>,greater<int> > q;
-
使用 priority_queue 实现堆排序?
优先队列本身是堆实现的。只需维护好优先队列的容量 k,超过pop掉。
统计问题
map 统计的神。遍历别忘了迭代器初始化。
其他
-
删除 vector 任意位置元素?
vector<int>v; //删除 v[i] swap( v[i],v[v.size()-1]); v.pop_back();
其实只是
v.size()
减少,内存不释放。vector<int >v;v.push_back(11);v.push_back(22);v.push_back(33);v.pop_back();v.pop_back();v.pop_back();cout<<v.size()<<endl;v.push_back(44);cout<<v[0]<<endl;cout<<v[1]<<endl;cout<<v[2]<<endl;
这里存入三个元素,之后全部删除,v.size() 结果是 0,是预期的结果,
但此时通过下标访问v[0]~v[2],原来的值仍然可以访问到,删除时内存没有释放掉。
之后再加入新的元素44,v[0] 内容被覆盖了。
-
vector<vector<int > >v;
尖括号嵌套尽可能规范地隔开,priority_queue <int,vector<int>,greater<int>> pq;
这种尖括号紧贴一起依稀记得编译没通过。 -
连续子序列和问题,优先考虑滑动窗口。