首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

2024年度总结:成就与挑战并存,与君协同,砥砺前行2025

  • 25-02-18 12:41
  • 2221
  • 11112
blog.csdn.net

引言

在这里插入图片描述

非常荣幸入围了 csdnTOP300年度博主的遴选,这也是我第一次入选这么大的比赛,借此机会,想对2024年做一个总结和对2025年的规划

1.命运齿轮转动之刻

时光飞逝,岁月如梭,转眼间已经与csdn相识了7个月,第一篇博客也只是浅浅记录了一下知识点,并没有介绍自己,趁着新年佳节,想弥补一下当初的遗憾,也为自己的未来做好规划

我是一名211大学的大二学生,专业为软件工程,经历了高考的残酷斗争,我只想报复性地玩耍,然而在平淡的大学生活中,危机感始终笼罩着我,学校的课程终究只是纸上谈兵,并不系统化,所以在大一下时,我决定了我要去 学技术,做真正的IT人!在注册了csdn账号并发布了第一篇博客后,命运齿轮开始了转动
在这里插入图片描述

梦开始的地方:第一篇博客

在这里插入图片描述

2.砥砺前行,不畏艰巨之路

即使有了目标,但道路上的艰巨无一不令人叹息,即使我不再拘泥于拔高绩点,想去探索编程未来的边界,我又如何能跨越荆棘呢?荀子曰:“锲而舍之,朽木不折;锲而不舍,金石可镂。”,坚持,就是普通人的良药。我在csdn成长的道路上就遇到过不少曲折,但在 csdn无数的大佬帮助下,也成功披荆斩棘。

1.红与黑的比拼,红黑树与我的相遇

相信对大部分学计算机的大佬们来说,红黑树在结构复杂方面绝对占有一席之地,当时懵懂无知的我遇到它时,只想着打退堂鼓,但 在csdn查阅了相关资料后,自己进行了思考,也逐渐了解了其中的一些奥秘,并尝试着自己写出谜底,红黑树的奇妙结构无一不展示着 编程的魅力与前人的智慧。

在这里插入图片描述

我也来重温一下红黑树的插入准则。
约定:cur为当前节点,p为父节点,g为祖父节点,u为叔叔节点

    1. 情况一: cur为红,p为红,g为黑,u存在且为红
      ​​
      ​​在这里插入图片描述
      解决方式:将p,u改为黑,g改为红,然后把g当成cur,继续向上调整。
  • 2.情况二(单旋+变色): cur为红,p为红,g为黑,u不存在/u存在且为黑 (左左和右右)
    在这里插入图片描述

细分就是:(1) g->left = p, p->left= cur;左左
(2)g->right=p,p->right=cur;右右

p为g的左孩子,cur为p的左孩子,则进行右单旋转;

相反, p为g的右孩子,cur为p的右孩子,则进行左单旋转

p、g变色--p变黑,g变红

  • 3.情况三(双旋+变色): cur为红,p为红,g为黑,u不存在/u存在且为黑 (左右和右左)

在这里插入图片描述

细分就是:(1)g->left=p,p->right=cur;左右

(2)g->right=p,p->left=cur;右左

p为g的左孩子,cur为p的右孩子,则针对p做左单旋转;

相反, p为g的右孩子,cur为p的左孩子,则针对p做右单旋转

则转换成了情况2!!!!!,然后再用情况2的旋转处理一下就行了
(这点真是异常巧妙,把情况3转换为情况2,可以有效解决新问题)
代码如下:

while (parent&&parent->col == RED)//parent为黑不需要调整,如果cur变成root,parent就不存在退出循环
{
	node* grandparent = parent->_parent;//祖父一定存在,因为只有根节点是没有祖父的,而根节点一定是黑色的
	if (parent==grandparent->_left)
	{
		//      g
		//    p   u
		node* uncle = grandparent->_right;  //父亲在左则叔叔在右
		if (uncle && uncle->col == RED)     //情况一.如果叔叔存在且为红色
		{
			//变色
			parent->col = uncle->col = BLACK;
			grandparent->col = RED;
			//重置cur,parent,继续向上处理
			cur = grandparent;//变为祖父
			parent = cur->_parent;
		}
		else //叔叔不存在或为黑色,旋转加变色
		{
			//   g
			//  p
			// c

			if (cur == parent->_left)  //情况二.单旋
			{

				rotateR(grandparent);
				parent->col = BLACK;
				grandparent->col = RED;
			}

			//   g
			//  p
			//   c

			else      //情况三.cur==parent->_right,双旋
			{
				rotateL(parent);//经历一次左旋后变成情况二!!!!!!!!!!!(cur和parent换位置)
				rotateR(grandparent);
				cur->col = BLACK;
				grandparent->col = RED;
			}

			break;//调整一次就结束了,所以经历过旋转后不需要重置cur,parent,grandparent
		}
	}
	else
	{
		//      g
		//    u   p
		//
		node* uncle = grandparent->_left;  //父亲在右则叔叔在左
		if (uncle && uncle->col == RED)
		{
			parent->col = uncle->col = BLACK;
			grandparent->col = RED;
			//
			cur = grandparent;
			parent = cur->_parent;
		}
		else
		{
			//    g
			//  u   p
			//        c
			if (cur == parent->_right)
			{
				rotateL(grandparent);
				parent->col = BLACK;
				grandparent->col = RED;
			}
			else
			{
				//   g
				// u   p
				//    c
				rotateR(parent);
				rotateL(grandparent);
				cur->col = BLACK;
				grandparent->col = RED;

			}
			break;//调整一次就结束了,所以经历过旋转后不需要重置cur,parent,grandparent
		}
	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85

每次重新复盘,都有不一样的收获

2.过往与未来的相遇,回溯时光的震撼

在学完了数据结构和部分c++内容后,我开始尝试接触算法题,每次做不出题时的 焦虑与烦躁,都会在完成解题后化作 酣畅与喜悦,这里我也要感谢csdn平台,很多次在我手足无措时,只要点开csdn,就有无数大佬发布他们自己的解题思路,很多次都使迷茫的我瞬间醍醐灌顶

在这里插入图片描述
虽然目前只写了80多道题,但我还会继续加油滴

其中最令我印象深刻的就是不同路径|||啦,让我真正感受到递归的魅力。

在这里插入图片描述

这个题就是走迷宫的类型,对于第一次,没学过任何算法的我,写了40多分钟才完成,可以说是里程碑的一题,csdn大佬的回溯入门文章也给了我很大的启发,希望我之后也能写出自己的迷宫小游戏。

class Solution {
public:

int num=0;
int row=0;
int line=0;


bool judge(vector<vector<bool>>&check)
{
    for(int i=1;i<row+1;i++)
        {
           for(int j=1;j<line+1;j++)
           {  
               if(check[i][j]==false)//有格子没走过
               return false;
           }
        }
    return true;//所有格子都走过
}




void dfs(vector<vector<int>>& square,int i,int j,vector<vector<bool>>&check)
{
       if(square[i][j]==2)  //走到终点
       {
            if(judge(check))
            {
                num++;  //路径数量++;
            }
       }


       if((square[i][j+1]==0||square[i][j+1]==2)&&!check[i][j+1])//判断右
       {
          check[i][j+1]=true;
          dfs(square,i,j+1,check);
          check[i][j+1]=false;//恢复现场
       }

       if((square[i][j-1]==0||square[i][j-1]==2)&&!check[i][j-1])//判断左
       {
          check[i][j-1]=true;
          dfs(square,i,j-1,check);
          check[i][j-1]=false;//恢复现场
       }

       if((square[i+1][j]==0||square[i+1][j]==2)&&!check[i+1][j])//判断下
       {
          check[i+1][j]=true;
          dfs(square,i+1,j,check);
          check[i+1][j]=false;//恢复现场
       }



       if((square[i-1][j]==0||square[i-1][j]==2)&&!check[i-1][j])判断上
       {
          check[i-1][j]=true;
          dfs(square,i-1,j,check);
          check[i-1][j]=false;//恢复现场
       }

}


    int uniquePathsIII(vector<vector<int>>& grid) {
        row=grid.size();
        line=grid[0].size();
        int position_row=0;
        int position_line=0;
        vector<vector<bool>>check(row+2,vector<bool>(line+2,false));
        vector<vector<int>>square(row+2,vector<int>(line+2,3));

        for(int i=1;i<row+1;i++)
        {
           for(int j=1;j<line+1;j++)
           {
               square[i][j]=grid[i-1][j-1];
               if(square[i][j]==1||square[i][j]==-1)
               {
                    if(square[i][j]==1)
                    {
                        position_row=i;//找入口的行
                        position_line=j;//找入口的列
                    }
                    check[i][j]=true; //
               }
           }
        }
     

     dfs(square,position_row, position_line,check);
     return num;
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98

3.漫漫长路,沿途总有收获之时

在csdn发文7个月,也第一次迎来了我的年度报告(嘻嘻)
在这里插入图片描述
一年的旅行,让我收获颇丰,我与csdn共奋战!
在这里插入图片描述

一年的努力,让我收获了10033次点赞,5477次评论,8002次收藏,476次代码分享,也成功获得了 c++领域新星创作者的身份

在这里插入图片描述
我也在1024征文活动中得到了属于自己的第一份实体回报:

在这里插入图片描述

在其他社区中也取得了一点点小成就:
在这里插入图片描述

2024年已经画上了句号,回望过去的一年,虽然充满了挑战,但也让我收获了成长与启示。每一次的跌倒都成就了更加坚韧的我,每一份努力都为新的一年奠定了坚实的基础。感谢过去一年的所有经历,它们塑造了今天的我。随着2025年的到来,我将继续以更加坚定的步伐,走向更加广阔的天地。

愿新的一年里,我们都能带着对生活的热爱和对未来的期待,勇敢前行,创造属于自己的辉煌,与csdn平台一起奋斗。

推广/合作/学习交流/请大佬加wx
微信名片
注:本文转载自blog.csdn.net的hope kc的文章"https://blog.csdn.net/2301_80374809/article/details/145265371"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top