自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 DAY14|二叉树理论基础、递归遍历、迭代遍历、统一迭代

同时,它将节点的左子节点和右子节点初始化为 NULL。分析一下为什么刚刚写的前序遍历的代码,不能和中序遍历通用呢,因为前序遍历的顺序是中左右,先访问的元素是中间节点,要处理的元素也是中间节点,所以刚刚才能写出相对简洁的代码,因为要访问的元素和要处理的元素顺序是一致的,都是中间节点。那么再看看中序遍历,中序遍历是左中右,先访问的是二叉树顶部的节点,然后一层一层向下访问,直到到达树左面的最底部,再开始处理节点(也就是在把节点的数值放进result数组中),这就造成了处理顺序和访问顺序是不一致的。

2024-04-16 16:44:09 754

原创 DAY13|239. 滑动窗口最大值、347.前K个高频元素

所以大家经常说的大顶堆(堆头是最大元素),小顶堆(堆头是最小元素),如果懒得自己实现的话,就直接用priority_queue(优先级队列)就可以了,底层实现都是一样的,从小到大排就是小顶堆,从大到小排就是大顶堆。对于窗口里的元素{2, 3, 5, 1 ,4},单调队列里只维护{5, 4} 就够了,保持单调队列里单调递减,此时队列出口元素就是窗口里最大元素。那么问题来了,定义一个大小为k的大顶堆,在每次移动更新大顶堆的时候,每次弹出都把最大的元素弹出去了,那么怎么保留下来前K个高频元素呢。

2024-04-16 00:07:18 828

原创 DAY10&11|232.用栈实现队列、225. 用队列实现栈、20 1047 150

本题要删除相邻相同元素,相对于20. 有效的括号来说其实也是匹配问题,20. 有效的括号 是匹配左右括号,本题是匹配相邻元素,最后都是做消除的操作。所以就是用栈来存放,那么栈的目的,就是存放遍历过的元素,当遍历当前的这个元素的时候,去栈里看一下我们是不是遍历过相同数值的相邻元素。从栈中弹出剩余元素,此时是字符串ac,因为从栈里弹出的元素是倒序的,所以再对字符串进行反转一下,就得到了最终的结果。确实是容易代码越写越乱,原理感觉就这样的,懂,然后代码上手越写越乱,乱糟糟一团,改都改不了。

2024-04-15 00:37:20 840

原创 DAY9|28. 实现 strStr()、459.重复的子字符串

步骤一:因为 这是相等的前缀和后缀,t[0] 与 k[0]相同, t[1] 与 k[1]相同,所以 s[0] 一定和 s[2]相同,s[1] 一定和 s[3]相同,即:,s[0]s[1]与s[2]s[3]相同。步骤三: 因为 这是相等的前缀和后缀,t[2] 与 k[2]相同 ,t[3]与k[3] 相同,所以,s[2]一定和s[4]相同,s[3]一定和s[5]相同,即:s[2]s[3] 与 s[4]s[5]相同。前缀表里,统计了各个位置为终点字符串的最长相同前后缀的长度。

2024-04-14 21:45:48 1062

原创 DAY8|344.反转字符串、541. 反转字符串II、151.翻转字符串里的单词

本题是字符串基础题目,就是考察 reverse 函数的实现,同时也明确一下 平时刷题什么时候用 库函数,什么时候 不用库函数。这道题目基本把 刚刚做过的字符串操作 都覆盖了,不过就算知道解题思路,本题代码并不容易写,要多练一练。本题又进阶了,自己先去独立做一做,然后在看题解,对代码技巧会有很深的体会。这个很经典很经典,3年前肯定做过,印象非常深,思路都记得,但写不出来。这个模拟,想写的像卡哥一样简洁有难度。

2024-04-14 21:02:32 305

原创 DAY7|454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和

但是我们依旧可以去做剪枝,逻辑变成。本题是使用哈希法的经典题目,而0015.三数之和 ,0018.四数之和 并不合适使用哈希法,因为三数之和和四数之和这两道题目使用哈希法在不超时的情况下做到对结果去重是很困难的,很有多细节需要处理。本题虽然和 两数之和 很像,也能用哈希法,但用哈希法会很麻烦,双指针法才是正解,可以先看视频理解一下 双指针法的思路,文章中讲解的,没问题 哈希法很麻烦。四数之和,和15.三数之和 是一个思路,都是使用双指针法, 基本解法就是在15.三数之和 的基础上再套一层for循环。

2024-04-10 15:48:13 993

原创 DAY6|242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和

本题就开始考虑 什么时候用set 什么时候用数组,本题其实是使用set的好题,但是后来力扣改了题目描述和 测试用例,添加了 0 <= nums1[i], nums2[i] <= 1000 条件,所以使用数组也可以了,不过建议大家忽略这个条件。这句话很重要,大家在做哈希表题目都要思考这句话。建议:本题虽然是 力扣第一题,但是还是挺难的,也是 代码随想录中 数组,set之后,使用map解决哈希问题的第一题。建议:大家要了解哈希表的内部实现原理,哈希函数,哈希碰撞,以及常见哈希表的区别,数组,set 和map。

2024-04-09 11:46:09 265

原创 DAY4|24.两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题02.07.链表相交、142.环形链表II

卡哥说:有的录友会因为各种各样的事情没跟上进度,时间紧张的录友 可以只把题目AC,博客简单记录思路也可以,甚至是 只把题解看一遍 了解一下思路也可以,但一定要跟上进度,这样才有节奏,如果 大家每日任务落下了 就会一直落下了,很难再追上,然后 自己进度就越来越慢,跟不上节奏,成为群里的旁观者。可以使用快慢指针法,分别定义 fast 和 slow 指针,从头结点出发,fast指针每次移动两个节点,slow指针每次移动一个节点,如果 fast 和 slow指针在途中相遇 ,说明这个链表有环。

2024-04-08 08:49:45 1120

原创 DAY03|203.移除链表元素、707.设计链表、206.反转链表

鸡皮题:地址指向的修改是影响的,但是在你的代码中,你只是通过改变pre->next指针的指向来实现删除节点的操作,并没有改变head指针本身的值。卡哥说:还要说明一下,就算使用C++来做leetcode,如果移除一个节点之后,没有手动在内存中删除这个节点,leetcode依然也是可以通过的,只不过,内存使用的空间大一些而已,但建议依然要养成手动清理内存的习惯。如果你希望返回的是修改后的链表头节点,你可以在函数内部维护一个新的指针变量来记录新的头节点,然后在操作结束后返回这个新的头节点。

2024-04-06 03:26:46 797

原创 第二天|977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II

平方后,左指针=0和右指针=nums.size()-1的值比大小,左小于等于右则右指针左移动,直到左大于右,左大于右,就把左+1到右全都左挪1格,把原来的左放到空出来的右这里。这个第一个思路很能说明问题,说明我对于题目关键信息是没有提取到的,也没有捕捉到双指针的使用方法,整个脑子思维是非常混乱的,非常云,已有条件不利用,没有最好的利用。这是过了测试的代码,漏一个等号耽搁了好久,一直查,查不出来,还怀疑是思路问题,最后调试出来的,发现这个边界不对劲,sum有问题,才发现这个漏掉了等号。

2024-04-05 09:38:52 1045

原创 第一天|数组理论基础、704.二分查找、27.移除元素

代码随想录算法训练营第一天

2024-04-04 03:53:34 838

原创 力扣面试题08.05递归乘法[简单]含快速幂解法和优化解法

基础递归|快速幂思想递归|最小优化基础递归、对于快速幂的思想我前些天讲过,可以去我的主页翻我前些天的文章,这里不再详解,只说一句:当最后一次B=1时候单单返回一个A,这个快速幂利用设计的很巧妙class Solution { //基础递归public: int multiply(int A, int B) { if(B==1) return A; return A+multiply(A,--B); } //如果有9287346 1这.

2021-03-30 08:41:00 137

原创 剑指offer4题二维数组查找|讲解二维数组

AC代码先上,注释是从看到题第一眼到AC所有的思考过程class Solution {public: bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) { if(matrix.empty()||matrix[0].empty()) return false; int n=matrix.size(); int m=matrix[0].

2021-03-26 18:49:25 428

原创 剑指offer03题C++版集合/原地置换法多解&&反思&&总结

以下各种方法均为能过的C++代码代码(集合方法:利用set集合的性质)class Solution {public: int findRepeatNumber(vector<int>& nums) { set<int> arr; int repeat=-1; for(int i=0;i<nums.size();++i){ if(arr.find(nums[i])==arr.end

2021-03-25 18:49:58 291

原创 C++生成0到n中一个随机数的方法

种子方法利用srand()种子填充,和rand()函数srand()函数:随机数发生器的初始化函数,需要提供一个种子,这个种子会对应一个随机数。如果使用相同的种子,rand() 函数会出现一样的随机数。默认种子数是1,即srand(1)。rand()函数:伪随机数发生器,需要先调用srand初始化,一般用当前日历时间初始化随机数种子,这样每行代码都可以产生不同的随机数。#include <iostream>#include<ctime>using nam..

2021-03-25 18:06:35 862

原创 剑指offer66题解法之上下三角分区

先上第一次通过的代码// class Solution {// public:// vector<int> constructArr(vector<int>& a) {// vector<int> b(a.size(),1);// for(int i=0;i<a.size();++i){ //O(n^2),测试过了,但还是时间复杂度太高,怎么优化?不让用除法,确实// //如果拿积

2021-03-25 17:47:42 62

原创 LCP11题.期望个数统计(简单题考察数学理解)

LCP 11. 期望个数统计某互联网公司一年一度的春招开始了,一共有n名面试者入选。每名面试者都会提交一份简历,公司会根据提供的简历资料产生一个预估的能力值,数值越大代表越有可能通过面试。小 A 和小 B 负责审核面试者,他们均有所有面试者的简历,并且将各自根据面试者能力值从大到小的顺序浏览。由于简历事先被打乱过,能力值相同的简历的出现顺序是从它们的全排列中等可能地取一个。现在给定n名面试者的能力值scores,设X代表小 A 和小 B 的浏览顺序中出现在同一位置的简历数,求X的期...

2021-03-25 16:25:23 251

原创 剑指offer16题:我对二分法快速幂的理解

首先是二分法快速幂的代码(题解在最下面,这里主要讲原理,看懂原理解题就是ez)while(n){ //这里的n是次方数,计算x的n次方 if(n&1) res*=x; x*=x; n>>=1;}可以这样理解,最后一次的n改变必定是从1到0的,这个过程一定要把当前的n=1时候的x乘进res偶数的时候把这个平方带来的增加暂时存进x,等到下一个必定出现的奇数时候把存在x里的平房增量乘进去,所以res就是n次方的增量的全部...

2021-03-25 13:56:15 132

原创 (个人解题试错过程)剑指offer49题输出第n个丑数

以下先展示的为第一次第二次尝试时候写的错误代码(看正确请往下滑)错在对于丑数的理解错误,而且第一个也没有考虑周全,没考虑质因子大于10的情况第一遍的错误解答class Solution {public:int nthUglyNumber(int n) {vector<int> answer={1};int count=0;for(int i=2;count<=n;i++){...

2021-03-23 19:51:36 72

原创 自己写的HOJ2094困惑,解题和思考

首先第一个是为什么题里给我input例子里写三个选手,但是给的有向边却一共喊有四个元素啊看了好多解题都写着数量是3然后理所当然接四个名字我人都傻了,是我漏了什么常识不知道吗???咱也不知道咱也不敢问,就这样吧可能以后什么时候就想出来漏了什么呢然后说说我的第二个困惑如果win-lose大于1时候到底是这种情况永远不会发生还是如果发生了也不是冠军呢?题中给的不是冠军的情况,是total==lose,构成有向有环图会有有向有环图导致total-lose大于1吗?想一想.

2021-03-12 06:55:25 108

原创 冒泡排序和插入排序对比

冒泡排序和插入排序都是两层for循环,时间复杂度O(n)区别在于冒泡排序是拿一个元素和无序序列去遍历比较,比较得到整个无序序列中最值,然后放入有序序列,而一旦放入有序序列,就不再碰了冒泡排序的当前元素是无论如何不会触摸有序序列的非常生动的体现了冒泡的情形,泡泡是乱的,最大的泡泡在大大小小杂乱无章的泡泡群中漂浮到最上面而插入排序呢恰恰相反插入排序是拿一个元素和有序的数列去比,从单一元素的假有序一个一个加,拿一个元素进入有序序列,碰到比自己大或小的就即刻坐下,不再继续比较插入排序的当

2021-03-11 02:10:34 6382 2

原创 三数排序中的冒泡思想应用

321排序,从小到大,123基础的不能再基础但我刚开到还是没想到if(a>b) 换;if(a>c) 换;if(b>c) 换;如果换了顺序变成ab,bc,ac就不对了排序的冒泡思想第一种比较是前俩if把最小的放到第一位,然后比较后俩,向下冒泡而第二种他在ab顺序确定后,又确定bc顺序,能保证a和b同时小于c但无法保证ab顺序所以做修改if(a>b) 换;if(b>c) 换;if(a>b) 换;对了这是什么?前俩

2021-03-09 11:33:59 106

原创 C++中vector数组的求平均值函数average()定义问题

#include <iostream>#include<vector>#include<stdio.h>using namespace std;double average(double *arr){ int len = (*arr).size; int sum = 0; int i; for ( i = 0;i < len; i++){ sum += i; } return su.

2020-10-24 22:25:36 9453

原创 指向结构的指针|实例区分结构和结构指针的用法

//// main.cpp// C++106pracitce//// Created by 张宏宽 on 2020/10/6.////#include <iostream>////int main(int argc, const char * argv[]) {// // insert code here...// std::cout << "Hello, World!\n";// return 0;//}#include<

2020-10-06 07:05:45 149

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除