前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法练习——力扣随笔【LeetCode】【C++】

算法练习——力扣随笔【LeetCode】【C++】

作者头像
来杯Sherry
发布2023-07-24 19:26:36
2120
发布2023-07-24 19:26:36
举报
文章被收录于专栏:第一专栏第一专栏

LeetCode 练习随笔

做题环境 C++ 中等题很值,收获挺多的 不会的题看题解,一道题卡1 h +,多来几道,时间上耗不起。

力扣上的题目和 OJ题目相比不同之处?

一开始上手力扣不习惯,OJ 的题目提交的是完整代码,力扣上的C++只提交目标函数代码,比如某个题目你只需要完成topKFrequent(nums,k)这个函数。

代码语言:javascript
复制
class Solution {
    vector<int> topKFrequent(vector<int>& nums, int k) {

    }
};

这也就意味着程序设计的输入不需要自己额外设计了,同时限制了你数据的输入和返回内容的格式。 多亏了oj许多来自力扣的题并补全了完整代码(目标函数部分空缺),渐渐习惯了编写目标函数的答题习惯。

定义问题

在哪定义结构体

有两个位置可写:

1)类里面,讲究的话写在private中,这里就不讲究了。

代码语言:javascript
复制
class Solution {
public:
    struct node
    {
      int data;  
    };
    vector<int> topKFrequent(vector<int>& nums, int k) {

    }
};

2)顶部区域

代码语言:javascript
复制
 struct node
    {
      int data;  
    };

class Solution {
public:
    struct node
    {
      int data;  
    };
    vector<int> topKFrequent(vector<int>& nums, int k) {

    }
};

在哪定义全局变量

1)顶部区域

代码语言:javascript
复制
#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)换个方式,传参方式改为引用

很多全局变量是可以被替代的,比如希望值被修改并返回到原来作用域,但返回值位置紧张。

暴力时,全局变量开大数组还是有点用处的。

在哪定义头文件

一般是全面的,多虑了。

下面这种做题区域顶部写头文件试过,编译通过。

代码语言:javascript
复制
#include<algorithm>

class Solution {
public:
    vector<int> topKFrequent(vector<int>& nums, int k) {

    }
};

排序问题

vector 存入结构体怎么自定义比较规则?

1)自定义规则为结构体形式(优先队列也可用)

代码语言:javascript
复制
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)自定义规则为静态函数(简单)

代码语言:javascript
复制
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 排序

代码语言:javascript
复制
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;
}
代码语言:javascript
复制
//默认降序

//没有结构体,升序
priority_queue <int,vector<int>,greater<int> > q;

使用 priority_queue 实现堆排序?

优先队列本身是堆实现的。只需维护好优先队列的容量 k,超过pop掉。

统计问题

map 统计的神。遍历别忘了迭代器初始化。

其他

删除 vector 任意位置元素?

代码语言:javascript
复制
vector<int>v;
//删除 v[i]
swap( v[i],v[v.size()-1]);
v.pop_back();

其实只是 v.size()减少,内存不释放。

代码语言:javascript
复制
 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;这种尖括号紧贴一起依稀记得编译没通过。

连续子序列和问题,优先考虑滑动窗口。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-07-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • LeetCode 练习随笔
    • 力扣上的题目和 OJ题目相比不同之处?
      • 定义问题
        • 排序问题
          • 统计问题
            • 其他
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档