行业知识
菜鸡力扣初级算法刷题记录(持续更新)
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怎么批考卷?