力扣刷题记录-5

No.136

在这里插入图片描述

复盘:
1、这道题核心思路就是遍历数组,记录数字出现的次数并找出只出现了1次的数字
2、这种题我的第一想法就是用哈希集来存储数字,由于其他数字都出现了两次,因此我的做法是如果出现1次则把数字存入哈希集,
再出现的话就删去这样的话到最后哈希集中剩下来的就是只出现了一次的数字。
3、但是这道题比较特殊,只有一个数字出现一次,其他数字都出现了两次。一个数字与它本身的异或为0,与0的异或为它本身,
再加上异或运算的交换律,我们可以得出只要将所有数字逐个异或,最后剩下来的就是只出现了一次的数字
4、异或运算的方法同样适用于约去偶数次找奇数次,但是如果其他数字都不是偶数次,那这种方法就用不了

No.169

在这里插入图片描述

复盘:
1、这个题的核心思路也是记录数字出现的次数,找出出现最多的数字
2、我是直接用哈希表存次数,当找到出现次数大于n/2的数字的时候则直接返回
3、题解中排序的做法挺简洁的,由于众数出现次数大于n/2,所以排序完的中位数一定是众数
4、题解中分治的做法也值得学习,把数组分为两半,至少有一部分的众数是整个数组的众数,如果两个部分众数相同,则就是这个众数。
如果不相同,则再根据两个部分众数的次数的大小进行比较,再加上单个数字的众数就是它本身,因此这样分治完最终得到的就是整个数组的众数。

No.15

在这里插入图片描述

复盘:
1、这道题还是有点难度的,核心思路是找出不重复且和为零的三元组
2、首先是先排序再进行查找,这样能减少很多含重复数字的组。
3、然后通过观察三重循环可以看出来由于和为0,第二重循环从小到大的话第三重循环一定是比原来要小的元素,因此我们可以把第三重循环第三重循环改成变成一个从数组最右端开始向左移动的指针
此时便在原来三重循环的基础上将时间复杂度减到最小了,因此最后的解决方法就是排序加双指针循环。

No.75

在这里插入图片描述

复盘:
1、这道题的核心思路就是通过原地交换元素来完成让所有相同数字相邻的结果
2、首先可以很容易想到的是,我们可以直接统计每个数字出现的次数,然后直接把对应数量的数字放到一起就行了。当然这样就不是原地排序了,并且会占用额外的空间。
3、提到原地排序的话首先应该会想到双指针吧,这道题双指针有两种,一种记录0和1,同时从前往后。这种解法需要注意的就是可能会把原来换的1给换到后面去,
所以需要多一步来将0指针换的数字给换到1指针的位置。而另一种记录0和2的就不用了,一个从前往后一个从后往前。

No.56

在这里插入图片描述

复盘:
1、这道题的话核心思路就是通过对左端点的值进行排序,然后再根据相邻区间的端点值合并区间。
2、首先需要根据各区间左端点的值进行排序,因为每一个区间的左端点决定了是否会有重合区间,排序完之后,如果有重合的区间那么他们一定是相邻的。
3、后面就简单了,先把第一个区间扔进结果里,再逐个检查后面的区间有没有重合,检查重合就看后面区间的左端点和结果区间的右端点的大小比较就行了。

No.706

在这里插入图片描述

复盘:
1、这道题还挺简单的,主要就是考察对哈希表的理解
2、对于题目要求的三个函数,只需要根据键值对进行存储和删除就行了,还有需要注意的就是哈希表随机地址的定义。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于力扣刷题C++常用操作,我可以给你一些常见的操作和技巧: 1. 使用 STL 容器和算法库:STL(Standard Template Library)是 C++ 标准库中的一个重要组成部分,包含了许多常用的容器和算法。在力扣刷题中,使用 STL 可以大大提高代码的效率和可读性。例如,vector 可以用来存储动态数组,sort 可以用来排序等等。 2. 使用 auto 关键字:auto 关键字可以自动推导变量类型,可以减少代码量和提高可读性。例如,auto x = 1; 可以自动推导出 x 的类型为 int。 3. 使用 lambda 表达式:lambda 表达式是 C++11 中引入的一种匿名函数,可以方便地定义一些简单的函数对象。在力扣刷题中,使用 lambda 表达式可以简化代码,例如在 sort 函数中自定义比较函数。 4. 使用位运算:位运算是一种高效的运算方式,在力扣刷题中经常会用到。例如,左移运算符 << 可以用来计算 2 的幂次方,右移运算符 >> 可以用来除以 2 等等。 5. 使用递归:递归是一种常见的算法思想,在力扣刷题中也经常会用到。例如,二叉树的遍历、链表的反转等等。 6. 使用 STL 中的 priority_queue:priority_queue 是 STL 中的一个容器,可以用来实现堆。在力扣刷题中,使用 priority_queue 可以方便地实现一些需要维护最大值或最小值的算法。 7. 使用 STL 中的 unordered_map:unordered_map 是 STL 中的一个容器,可以用来实现哈希表。在力扣刷题中,使用 unordered_map 可以方便地实现一些需要快速查找和插入的算法。 8. 使用 STL 中的 string:string 是 STL 中的一个容器,可以用来存储字符串。在力扣刷题中,使用 string 可以方便地处理字符串相关的问题。 9. 注意边界条件:在力扣刷题中,边界条件往往是解决问题的关键。需要仔细分析题目,考虑各种边界情况,避免出现错误。 10. 注意时间复杂度:在力扣刷题中,时间复杂度往往是评判代码优劣的重要指标。需要仔细分析算法的时间复杂度,并尽可能优化代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值