小工具知识网

当前位置: 首页 > 行业知识 > 菜鸡力扣初级算法刷题记录(持续更新)

行业知识

菜鸡力扣初级算法刷题记录(持续更新)

2026-11-02 04:23:31 来源:互联网转载

���接参考力扣官网初级算法面试题单
初级算法 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台

本贴旨在记录自己的刷题感悟以供自己及后来者参考和回顾,也为刚开始刷题的小伙伴提供一个样本点

刷题语言:c++

数组:

1.
一开始是没什么思路的,看解析之后做完,第二天再写,只记得大概思路,又看了一遍解析才明白。

非严格递增,删除重复的元素,这类题可以用双指针,快慢指针,快指针便利整个数组,慢指针指向独一无二的数组位置,因为是非严格递增的,重复元素只能相邻,因此每次只判断相邻两个元素是否一致即可。

class Solution {public:    int removeDuplicates(vector& nums) {        int n = nums.size();        if ( n == 0){            return 0;        }        int fast = 1;        int slow = 1;        for(fast=1;fastnums[i-1]成立,则卖出,利润total+=nums[i]-nums[j],借用题解的图就是:  

把每次提高的值累加起来就好

 

class Solution {public:    int maxProfit(vector& prices) {        int n = prices.size();        if (n == 0){            return 0;        }        int i = 0;        int j = 1;        int total = 0;        while(jprices[i]){                total+=prices[j]-prices[i];            }            i++;            j++;        }        return total;    }};

我这里用了两个指针,原理是一样的,每次只检查相邻元素,后面的元素比前面的元素大,那就果断卖出。

3.

这道题最容易想到的思路就是,创建一个临时数组temp[],装一下数组后面k%n个元素,这里k%n是因为,k可能大于nums.size(),所以取个余数,然后再把temp[],insert到nums[]即可。

看了题解,有个思路可以学习一下,叫做“三次反转”

第一次反转:整个数组反转

第二次反转:前k个元素反转

第三次反转:剩下的n-k个元素反转

 

class Solution {public:    void rotate(vector& nums, int k) {        int n = nums.size();        if(k>n){            k=k%n;        }        std::reverse(nums.begin(),nums.end());        std::reverse(nums.begin(),nums.begin()+k);        std::reverse(nums.begin()+k,nums.end());    }};

4.

这个最容易想到的就是暴力解法,遍历数组,然后每遍历一个元素,从这个元素的下一个元素开始找有没有和它一致的元素,这样很容易超时

lz最终选择使用排序的方法:

先把数组排序,然后两两比较,每次只比较相邻元素,如果有一致的的,则返回true,这个和第一题很像

记住以后可以用排序这种思想来简化题目。

 

class Solution {public:    bool containsDuplicate(vector& nums) {        int n = nums.size();        if (n == 0){            return 0;        }        std::sort(nums.begin(),nums.end());        for(int i=0;i

上一篇:统考英语b怎么批考卷?

下一篇:【好书分享第十一期】深入Rust标准库(文末送书)