![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
懒懒不会瘦
这个人很菜,什么也没有留下
展开
-
LeetCode 786. 第 K 个最小的素数分数
题目 786. 第 K 个最小的素数分数解题思路首先看数据量,嗯,只有1000个,暴力可行。再看题目描述,找第k小元素,妥妥优先队列。具体做法:使用优先队列维护一个大小为k的大顶堆,当队列大小<k时,往里压入元素;当队列大小>=k时,比较当前元素和堆顶元素的大小,如果堆顶元素值>当前元素值,则抛弃堆顶元素,并把当前元素压入队列,否则不改变当前队列。c++代码如下:class Solution {public: struct node{ double valu原创 2021-11-29 21:09:34 · 510 阅读 · 0 评论 -
LeetCode 335. 路径交叉
题目 335. 路径交叉 思路卷来卷去,要想不相交,一共只能有三种情况:1.要么一条路走到底一直往外卷,即从第三步开始,每一步都大于前两步的长度,即distance[i]>distance[i-2],这样卷到地老天荒都不会相交;2.要么换一种卷法,一直往里卷(即内卷hhh),即从第三步开始,每一步都小于前两步的长度,即distance[i]<distance[i-2];3.卷到一半突然换一种卷法之外卷转内卷(注:内卷不能突然转外卷,这样一定会相交的)。假如转换点为j,那么对于任意i&l原创 2021-10-29 10:28:46 · 145 阅读 · 0 评论 -
LeetCode 638. 大礼包
题目 638. 大礼包 解题思路看题第一眼,想到了贪心,细品,想到了动态规划,再细品,还是回溯吧。。。菜鸡的自我救赎,能暴力就暴力hhhhh。 1. 难点在于每个礼包可以选无数次,用动态规划不太好做 2.对于这种可以选多次的最优化问题,回溯最好想,而且数据量也不大,不会超时 回溯优化:剪枝。ans记录当前的最小花费,一旦某条支路上的money超过了ans,这条支路可以毫不犹豫的舍弃。c++代码如下:class Solution {public: int ans=0;//记录用的钱原创 2021-10-25 11:08:29 · 227 阅读 · 0 评论 -
LeetCode 453. 最小操作次数使数组元素相等
题目 453. 最小操作次数使数组元素相等 解题思路乍一看是不是还挺复杂的,但是你细品后发现,其实就是找最小值和各个元素之间的差,然后求和。原理:每次n-1个数同时加一,可以等价于每次有一个数减一,因为只能做减法,所以数组最后的数只能是最小值。这样的话每个元素减去最小值并求和就是答案。c++代码如下:class Solution {public: int minMoves(vector<int>& nums) { int ans=0;原创 2021-10-20 09:59:06 · 67 阅读 · 0 评论 -
LeetCode 面试题 02.05. 链表求和
题目 面试题 02.05. 链表求和解题思路 由于两个加数在链表中是反向存储的,所以处理起来比较简单,模拟一下加法的过程,依次将链表中的数字相加。需要注意的点在于仅为的处理,单独设置一个整型用于存储当前的进位即可。c++代码如下:class Solution {//反向存放时的解法:模拟public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { if(!l1&&!l2) return NULL;原创 2021-10-13 11:14:47 · 62 阅读 · 0 评论 -
LeetCode 2028. 找出缺失的观测数据
题目 2028. 找出缺失的观测数据解题思路乍一看题目很长看起来很复杂的亚子,其实就是纸老虎,简单的模拟题。大致题意为:已知数组的总和sum、大小n和数字范围[1-6],求数组的某一种组合。思路如下:1. 求该数组的平均值mean_n,若平均值超过数字范围,则返回空数组;2. 数组中每个数初始为mean_n,此时还剩下sum%n的值未分配;3. 剩下的值挨个分配,不足6的值直接加到6,直到剩余值分配完为止。c++代码如下:class Solution {//没啥技巧 类似贪心 优先都分6原创 2021-10-10 15:27:32 · 92 阅读 · 0 评论 -
LeetCode 面试题 02.04. 分割链表
题目:面试题 02.04. 分割链表初步思路暴力法:1. 先遍历一遍链表,统计小于x的数的个数cnt;2. 链表的前cnt位存储小于x的数,定义俩指针,small指针负责将前cnt位的数,big指针负责后面的数。3. 若small指针遇到大于等于x的数,big指针遇到小于x的数,则交换这两个数。c++代码如下:class Solution {public: ListNode* partition(ListNode* head, int x) {//统计小于x的数的个数cnt原创 2021-10-06 15:14:44 · 59 阅读 · 0 评论 -
LeetCode 223 矩形面积
题目 223.矩形面积链接为:223.矩形面积 简单思路 本意为求出两个矩形的公共面积,覆盖面积=两个矩形的面积-公共面积。 C++代码class Solution {public: int computeArea(int ax1, int ay1, int ax2, int ay2, int bx1, int by1, int bx2, int by2) { int width_a=ax2-ax1; int height_a=ay2-ay1; .原创 2021-09-30 09:24:06 · 130 阅读 · 0 评论 -
LeetCode 面试题 01.08. 零矩阵
问题:面试题 01.08. 零矩阵普通思路 开辟额外两个哈希数组空间存储含有元素0的横坐标和纵坐标。时间复杂度O(m*n),空间复杂度O(n)。c++代码如下:class Solution {public: void setZeroes(vector<vector<int>>& matrix) { int n=matrix.size(); int m=matrix[0].size(); map<int,in原创 2021-09-29 21:54:29 · 66 阅读 · 0 评论 -
LeetCode 48 旋转数组
原题:48.旋转数组自己的骚操作思路:旋转前的第i列数据(逆序)在旋转后就会变成第i列数据(顺序)+位运算。int可以表示的范围为-2147483648~2147483647,而本题的数据范围是[-1000,1000],所以我们可以用int的低10位存储原本的数,10-20位存储旋转后的数。主要麻烦的点在于负数的处理:如果旋转前是负数,则第22位为1;如果旋转后是负数,则第23位为1。C++代码如下:public: int getlowint10(int num) {原创 2021-09-28 20:40:16 · 57 阅读 · 0 评论