Day1 代码随想录 刷题记录

总结:共刷两题,采用模式为:先思考试写后看课/看题解,看完题解/课程后再次尝试手动复原。

总计用时:3h20mins

leetcode模板解释:感觉leetcode的代码框架跟自己之前在另一个网站上看到的有区别,本来自己的C++底子有点弱不禁风,但是基础的语法好像也还算熟悉,主打一个学到哪儿不会就补一下。

class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
       // 实现代码的位置
    }
};

该常见代码块代表的意思是:

class为类,Solution是评测系统自动定义的名称,等于是你的解题包裹的名称。

public表示访问权限,允许评测系统访问该实现方法。

vector<int>是整型格式的一种,定义了该函数最终的返回。

括号里的表示传递相关的参数,加上&表明不用复制整个数组,只是单纯的引用。输入就从此读入,评测系统直接通过此处传参,所以用户不需要自行cin再次传入。

977.有序数组的平方

自己想法:最开始能想到的只有暴力解法,而且想不到平方的函数,突然想到直接相乘就可以。脑子也是有点僵化了。

不清晰的点:不清楚哪个函数可以直接调用来排序。--> sort(A.begin(),A.end())//调用sort函数,直接输入头和尾。

sort是C++ STL库中排序用的核心函数,语法如下:(comparator默认按照升序排序)

sort(start_iterator, end_iterator, [comparator]);

 sort(nums.begin(), nums.end(), greater<int>());
// 排序后 nums = {5, 4, 3, 1, 1}

正确解法:双指针

认清楚该结果数组的特性:最大值仅可能出现在数组的前后两个末端,即绝对值最大的地方。

即设置i, j两个指针分别指向前端和末端,而设立一个新数组来吸收判断出来的新数组。

注意出错点:

1.对新建立的数组要进行初始化,vector<int> result (元素数量,初始化的值)

如vector<int>(A.size(), 0)就是建立一个大小为A.size()的全是0的数组。

2.设立的末尾是A.size() - 1。

3.前后指针的判断条件是i <= j

4.挪动的时候要在赋完值之后再挪动,而不是写在for循环中挪动。

209.长度最小的子数组

自己想法:想到的就是用一个循环数组直接对现有的数组进行递减的排序,sort()。然后再写一个循环来判断不大于它的那个值要加几次。

不清晰的点:出现了部分样例不通过的现象。对题目的理解有问题。题目提到长度最小的连续的子数组,即在原数组要连续,不能进行排序的处理。

暴力解法是两个for循环硬找,会超时,故不做过多的赘述。

正确的解法:滑动窗口

第一个for循环是指向末尾的,指向前端的指针为辅助。

先通过第一轮的i = 0时的状态找出是否可以得到长度,再在现有长度上后指针保持移动,前指针看情况移动这样的情况。

注意:

1.先检查一下符号是否用对。

2.思考两个指针的话将如何使用。

3.设置完循环后,后端指针的sum的加和不应该添加条件。直接猛猛加就完事儿。

4.学会用判断语句解决问题,(result == INT_MAX) ? 0 : result;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值