刷Leetcode简单总结(1)

本文总结了在LeetCode上刷简单题目的经验和教训,包括遇到'control reaches end of non-void function'错误的解决办法,88题有序数组合并的思路,构造平衡二叉树时避免溢出的方法,有序链表找中位数的快慢指针法,以及C++中map在求众数问题中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录一下简单题中的经验以及错误,防止以后再犯(因为能力原因,目前只限于通过,至于算法的优化,等到中等/难题再考虑)

目录

83.删除排序链表中的重复元素

88.合并两个有序数组


1. 关于Leetcode中运行提示 control reaches end of non-void function 的 error:

用C++写的,出现这种提示可能并不是程序逻辑有误(我觉得是因为 Leetcode 的程序测试用的是白盒测试,所以每一个逻辑都要走一遍,如果它检测到某个逻辑不能返回值,那么可能就会报错),只需要在public函数末尾return一个值就可以了,这个值可以任意,亲测有效,执行和提交都可以成功通过

以下是Leetcode中第83题(简单题)没有在最后return一个值所以报错

solution.cpp: In member function deleteDuplicates
Line 42: Char 5: error: control reaches end of non-void function [-Werror=return-type]
     }
     ^
cc1plus: some warnings being treated as errors

2. 有时候刷题不需要考虑那么多因素,比如88题,题目中只说是有序数组,当时我想考虑升序和降序2种情况,但是考虑到之前写的题总是考虑太多最后定位错误需要好久所以这次我试着不关注数组内部的情况,思路是将nums2的元素直接覆盖nums1中从0开始的元素,然后弹出nums2中为0的数,最后用sort排序。通过这题又复习了一遍vector中常用的3种函数:

  • nums.pop_back(); //弹出末尾元素(直接写pop没有用,因为pop()是栈中才能使用的东西)
  • nums.push_back(a);  //类似压栈(同理不能缺写back)
  • sort(nums.begin(),nums.end());  //对vector中的所有元素进行排序,如果要修改默认排序的方法,就要加上第三个参数(函数需要自己写)

3. 构造平衡二叉树时,求中点不要用int mid=(l+r)/2,因为有溢出风险,比较稳妥的做法是int mid=l+(r-l)/2

4. 对有序链表查找中位数可以用快慢指针法,快指针向前移动速度是慢指针向前移动速度的2倍

5. C++中的map函数,就是key和value的映射;169题求众数中,可以用map记录每个值出现的次数,最后用迭代器访问map查找出现次数多于n/2的值并返回;m.count(x):查找m中是否有x,如果有,则返回1,否则返回0,x在m中只可能出现1次,因为key是关键值,不允许多次出现;遍历map的迭代器可以这样定义:

map<int,int>::iterator it;
        for(it=m.begin();it!=m.end();it++){
            if(it->second >nums.size()/2){
                return it->first;
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值