首页 文章 精选 留言 我的

精选列表

搜索[文件分享],共10042篇文章
优秀的个人博客,低调大师

8月分享与总结

前言:取得成功的要自律!可能有一腔热血,努力很长一阵子,但过一阵子之后,就不坚持了,所以要自律去约束自己时刻坚持着! 一、收获 8月份的收获还是很大的,主要有以下几个方面: 学会了使用github 注册账号很长时间了,但不怎么会用,这个月,基本功能都会用了,并在上面提交了leetcode的代码;Github是个巨大的宝库,里面有很多资源,C/C++很多开源项目都由源码... 看《C++ Primer Plus》基本了解了C++ 从4月份开始要学C++,一直磕磕绊绊,一直有项目要做,这个月基本没有项目,都是处理之前的bug或者现场的问题,所以有大块时间来学习,对C++的基本语法、定义、STL基本掌握,有句话觉得很对,C++不可能精通,C++的东西太多太杂,并且敲得代码太少、没做过项目,还要继续学习深造! 学习了数据结构和算法 通过看《剑指Offer》和《LeetCode.pdf》,学习并练习了数据结构和算法,觉得这两本书都不错,对于想练习这两方面的人,是一个很好的选择;PS:想要这两本书可以留言 知道了很有用的学习网站 学习C++直接看书学的,虽然写的很细,但很笼统,思路不是很清晰;然后关注很多公众号,推送了一个视频学习网站,而且都是免费的,讲的也很好,觉得学习一门新语言看视频、再看书,是一个很好的选择,先对大体上有一个了解和认知,之后再深入学习;还有都要找一些书的pdf,在网上找很费经,但发现一个网站可以免费下载;PS:想要这些资料,都可以留言哦 二、总结 8月份学习并收获了很多,但不足就是太急于就成,觉得自己还是太菜,想快点学习很多东西,有句谚语说得很好:心急吃不了热豆腐,不能着急,还是要按部就班的来,只要自律坚持一定会成为大牛的! PS:想要上面资料的,欢迎踊跃留言哦 作者: 柳德维 出处: https://www.cnblogs.com/liudw-0215/ ------------------------------------------- 个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人! 如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢! 万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ⁾⁾!

优秀的个人博客,低调大师

剑指offer例题分享--6

前言:继续整理例题,快速做完这部分,然后继续用C++去刷数据结构和算法的题。 面试题28: 代码如下: #include<iostream> #include<stdio.h> using namespace std; void Permutation(char *pStr,char *pBegin) { if(*pBegin == '\0') { printf("str:%s\n",pStr); } else { for(char *pCh=pBegin;*pCh!='\0';++pCh) { char temp = *pCh; *pCh = *pBegin; *pBegin = temp; Permutation(pStr,pBegin+1); temp = *pCh; *pCh = *pBegin; *pBegin = temp; } } } void Permutation(char *pStr) { if(pStr == NULL) return; Permutation(pStr,pStr); } int main() { char buf[32]="asd"; Permutation(buf); return 0; } 面试题29: 代码如下: /************************************************************************* > File Name: 29.cpp > Author: ma6174 > Mail: ma6174@163.com > Created Time: Tue 14 Aug 2018 09:45:42 AM CST ************************************************************************/ #include<iostream> using namespace std; bool g_bInputInvalid =false; bool CheckInvalidArray(int *numbers,int len) { if(numbers==NULL && len<=0) g_bInputInvalid = true; return g_bInputInvalid; } bool CheckMoreThanHalf(int *numbers,int len,int num) { int times = 0; for(int i=0;i<len;++i) { if(numbers[i] == num) times++; } bool isMoreThanHalf = true; if(times*2 < len) { g_bInputInvalid = true; isMoreThanHalf = false; } return isMoreThanHalf; } int MoreThanHalfNum(int *numbers,int len) { if(CheckInvalidArray(numbers,len)) return 0; int result = numbers[0]; int times = 1; for(int i=1;i<len;++i) { if(times == 0) { result = numbers[i]; times = 1; } else if(numbers[i] == result) times++; else times--; } if(!CheckMoreThanHalf(numbers,len,result)) result = 0; return result; } int main() { int data[]={1,2,5,6,2,2,2}; cout << "num: " << MoreThanHalfNum(data,7) << endl;; return 0; } 面试题30: 分析:一定要对C++的STL熟悉,才能看明白如下代码: #include<iostream> #include<set> #include<vector> #include<algorithm> #include<iterator> using namespace std; //greater<int>()是一个预定义函数对象,将multiset容器从大到小排序 typedef multiset<int,greater<int> > intSet; typedef multiset<int,greater<int> >::iterator setIterator; void GetLeastNumbers(const vector<int> &data,intSet &leastNumbers,int k) { //清空容器 leastNumbers.clear(); if(k<1 || data.size()<k) return; //创建迭代器 vector<int>::const_iterator iter = data.begin(); for(;iter!=data.end();++iter) { //小于k插入容器 if((leastNumbers.size())<k) leastNumbers.insert(*iter); else{ setIterator iteraCreatest = leastNumbers.begin(); //如果插入的数比容器中的最大值小,则删除 if(*iter < *(leastNumbers.begin())) { leastNumbers.erase(iteraCreatest); leastNumbers.insert(*iter); } } } } int main() { vector<int> data(4); data[0] = 1; data[1] = 8; data[2] = 9; data[3] = 2; intSet set; GetLeastNumbers(data,set,2); //iterate over all elements and print them intSet::iterator pos; for (pos = set.begin(); pos != set.end(); ++pos) { cout << *pos << ' '; } cout << endl; return 0; } 作者: 柳德维 出处: https://www.cnblogs.com/liudw-0215/ ------------------------------------------- 个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人! 如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢! 万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ⁾⁾!

优秀的个人博客,低调大师

剑指offer例题分享--4

前言:搁置许久的更新要继续开始了!前一段时间一直在忙项目和C++的学习,所以搁置了!要改变注意了,要用C++进行编写了,因为要不断练习C++! 面试题15: 书中要求只能遍历链表一次,所以代码如下: #include<iostream> #include<cstdlib> using namespace std; struct ListNode { int data; ListNode * next; }; typedef struct ListNode linknode_t; typedef struct ListNode* linklist_t; linknode_t *CreateLink() // 创建空的链表 返回值 链表的首地址 { linknode_t *H; H = (linklist_t)malloc(sizeof(linknode_t)); H->next = NULL; return H; } void InitLink(linknode_t *H) // 初始化一个空的链表 { linknode_t *r, *p; int i; r = H; // r 指向 队尾位置 for(i = 0; i < 5; i++) { p = (linknode_t *)malloc(sizeof(linknode_t)); p->data = i+1; p->next = NULL; // 没有下一个节点 r->next = p; // 将p 放在 r 的后面 r = p; // r 指向新的队尾 } } void ShowLink(linknode_t* H) // 从队首->队尾 打印所有节点 { linknode_t *p; p = H->next; while(p != NULL){ cout << " " << p->data; p = p->next; } cout << endl; } ListNode *FindKthToTail(ListNode *pListHead,unsigned int k) { if(pListHead == NULL || k == 0) return NULL; ListNode *pAhead = pListHead; ListNode *pBehind = NULL; for(unsigned int i=0;i<k-1;++i) { if(pAhead->next != NULL) pAhead = pAhead->next; else { return NULL; } } pBehind = pListHead; while(pAhead->next != NULL) { pAhead = pAhead->next; pBehind = pBehind->next; } return pBehind; } int main() { linknode_t *H = CreateLink(); InitLink(H); ShowLink(H); linknode_t *S = FindKthToTail(H,2); cout << "data:" << S->data << endl; return 0; } 总结:要熟练对单链表的使用!当我们用一个指针不能解决问题,可以尝试用两个指针遍历链表,可以让其中一个指针遍历的速度快一些(比如一次在链表上走两步),或者让它在链表上走若干步! 面试题16: 主要考察链表的反转: 代码如下: #include<iostream> #include<cstdlib> using namespace std; struct ListNode { int data; ListNode * next; }; typedef struct ListNode linknode_t; typedef struct ListNode* linklist_t; linknode_t *CreateLink() // 创建空的链表 返回值 链表的首地址 { linknode_t *H; H = (linklist_t)malloc(sizeof(linknode_t)); H->next = NULL; return H; } void InitLink(linknode_t *H) // 初始化一个空的链表 { linknode_t *r, *p; int i; r = H; // r 指向 队尾位置 for(i = 0; i < 4; i++) { p = (linknode_t *)malloc(sizeof(linknode_t)); p->data = i+1; p->next = NULL; // 没有下一个节点 r->next = p; // 将p 放在 r 的后面 r = p; // r 指向新的队尾 } } void ShowLink(linknode_t* H) // 从队首->队尾 打印所有节点 { linknode_t *p; p = H->next; while(p != NULL){ cout << " " << p->data; p = p->next; } cout << endl; } ListNode *ReverseList(ListNode *pHead) { ListNode *pReversedHead = NULL; ListNode *pNode = pHead; ListNode *pPrev = NULL; while(pNode != NULL) { ListNode *pNext = pNode->next; if(pNext == NULL) pReversedHead = pNode; pNode->next = pPrev; pPrev = pNode; pNode = pNext; } return pReversedHead; } int main() { linknode_t *H = CreateLink(); InitLink(H); ShowLink(H); linknode_t *S = ReverseList(H); ShowLink(S); return 0; } 面试17: 题目如下: 代码如下: #include<iostream> #include<cstdlib> using namespace std; struct ListNode { int data; ListNode * next; }; typedef struct ListNode linknode_t; typedef struct ListNode* linklist_t; linknode_t *CreateLink() // 创建空的链表 返回值 链表的首地址 { linknode_t *H; H = (linklist_t)malloc(sizeof(linknode_t)); H->next = NULL; return H; } void InitLink(linknode_t *H,int n=1) // 初始化一个空的链表 { linknode_t *r, *p; int i; r = H; // r 指向 队尾位置 for(i = 0; i < 4; i+=n) { p = (linknode_t *)malloc(sizeof(linknode_t)); p->data = i+n; p->next = NULL; // 没有下一个节点 r->next = p; // 将p 放在 r 的后面 r = p; // r 指向新的队尾 } } void ShowLink(linknode_t* H) // 从队首->队尾 打印所有节点 { linknode_t *p; p = H->next; while(p != NULL){ cout << " " << p->data; p = p->next; } cout << endl; } ListNode *Merge(ListNode *pHead1,ListNode *pHead2) { //鲁棒性处理,空指针会造成程序崩溃 if(pHead1 == NULL) return pHead2; else if(pHead2 == NULL) return pHead1; ListNode * pMergedHead = NULL; if(pHead1->data < pHead2->data) { pMergedHead = pHead1; pMergedHead->next = Merge(pHead1->next,pHead2);//递归处理 } else { pMergedHead = pHead2; pMergedHead->next = Merge(pHead1,pHead2->next);//递归处理 } return pMergedHead; } int main() { linknode_t *H = CreateLink(); InitLink(H); linknode_t *H1 = CreateLink(); InitLink(H1,2); ShowLink(H); ShowLink(H1); linknode_t *S = Merge(H->next,H1->next); while(S != NULL){ cout << " " << S->data; S = S->next; } cout << endl; return 0; } 总结:理解递归部分的思想。 面试题18: 面试题18是关于二叉树的,先简单介绍一下二叉树吧。 二叉树特点: 第i层 最多节点的个数 2^(i-1) 树的深度 h , 树节点 最多 2^h-1 遍历二叉树方法:先序遍历 中序遍历 后序遍历,具体遍历方法介绍可以在网上找,这里就不具体介绍了。 程序中三种方法都写出来了,但只用了先序遍历。 题目如下: 代码如下: #include<iostream> #include<cstdlib> using namespace std; struct BinaryTreeNode { int data; //节点数据 BinaryTreeNode *lchild,*rchild; //左孩子、右孩子 }; typedef struct BinaryTreeNode tree_t; /****** 构造一个二叉树 递归实现 参数:形参1:开始值,形参2:结束值 ******/ tree_t *CreateTree(int i, int max) { //递归结束条件 if(i > max) { return NULL; // == return 0; } tree_t *T; T = (tree_t *)malloc(sizeof(tree_t)); T->data = i; T->lchild = CreateTree(2*i, max); T->rchild = CreateTree(2*i+1, max); return T; } //先序遍历输出二叉树 void FirstRoot_DLR(tree_t *p) { if(p == NULL) return ; cout << " " << p->data; FirstRoot_DLR(p->lchild); FirstRoot_DLR(p->rchild); } //中序遍历输出二叉树 程序中未使用 void MiddleRoot_DLR(tree_t *p) { if(p == NULL) return; MiddleRoot_DLR(p->lchild); cout << " " << p->data; MiddleRoot_DLR(p->rchild); } //后序遍历输出二叉树 程序中未使用 void LastRoot_DLR(tree_t *p) { if(p == NULL) return; LastRoot_DLR(p->lchild); LastRoot_DLR(p->rchild); cout << " " << p->data; } bool DoesTree1HaveTree2(tree_t *pRoot1,tree_t *pRoot2) { //树B为空直接不检查 if(pRoot2 == NULL) return true; if(pRoot1 == NULL) return false; if(pRoot1->data != pRoot2->data) return false; return DoesTree1HaveTree2(pRoot1->lchild,pRoot2->lchild)&&DoesTree1HaveTree2(pRoot1->rchild,pRoot2->rchild); } bool HasSubtree(tree_t *pRoot1,tree_t *pRoot2) { bool result = false; if(pRoot1!=NULL && pRoot2!=NULL) { result = DoesTree1HaveTree2(pRoot1,pRoot2); if(!result) HasSubtree(pRoot1->lchild,pRoot2); if(!result) HasSubtree(pRoot1->rchild,pRoot2); } return result; } int main() { tree_t *T1 = CreateTree(1,4); FirstRoot_DLR(T1); cout << endl; tree_t *T2 = CreateTree(1,2); FirstRoot_DLR(T2); cout << endl; //使用boolalpha输出为bool类型 cout << boolalpha <<HasSubtree(T1,T2) << endl; return 0; } 总结:书中第三章主要强调了代码的规范性、完整性和鲁棒性,鲁棒性例如对空指针的判断和处理...,用链表和二叉树做的例子,要熟悉掌握这两种数据结构! 作者: 柳德维 出处: https://www.cnblogs.com/liudw-0215/ ------------------------------------------- 个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人! 如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢! 万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ⁾⁾!

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册