剑指offer例题分享--7
前言:继续前面的分享...
面试题31:
代码如下:
#include<iostream> #include<limits.h> using namespace std; bool g_InvalidInput = false; int FindGreatestSumOfSubArray(int *data,int len) { if(data==NULL || len<=0) { g_InvalidInput = true; return 0; } int curnum = 0; //整型最小值 //int greatestnum = 0x80000000; int greatestnum = INT_MIN; for(int i=0;i<len;++i) { if(curnum <= 0) curnum = data[i]; else curnum += data[i]; if(curnum > greatestnum) greatestnum = curnum; } return greatestnum; } int main() { int data[]={1,-2,3,10,-4,7,2,-5}; cout << "max: " << FindGreatestSumOfSubArray(data,8) << endl; return 0; }
面试题37:
代码如下:
/************************************************************************* > File Name: 37.cpp > Author: ma6174 > Mail: ma6174@163.com > Created Time: Tue 14 Aug 2018 04:41:52 PM CST ************************************************************************/ #include<iostream> #include<algorithm> #include<iterator> #include<string> #include<list> #include<stdio.h> using namespace std; struct ListNode { int data; struct 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) // 初始化一个空的链表 { linknode_t *r, *p; int i; r = H; // r 指向 队尾位置 for(i = 0; i < n; 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) // 从队首->队尾 打印所有节点 { struct ListNode *p; p = H->next; while(p != NULL){ printf("%d --> ", p->data); p = p->next; } printf("\n"); } unsigned int GetListLength(ListNode *pHead) { unsigned int len = 0; ListNode *pNode = pHead; //pNode = pNode->next; while(pNode->next != NULL) { ++len; pNode = pNode->next; } return len; } ListNode *FindFirstCommonNode(ListNode *pHead1,ListNode *pHead2) { //得到链表长度 unsigned int len1 = GetListLength(pHead1); cout << "len1: " << len1 << endl; unsigned int len2 = GetListLength(pHead2); cout << "len2: " << len2 << endl; int nLengthDif = len1 - len2; ListNode *pListHeadLong = pHead1; ListNode *pListHeadShort = pHead2; if(len2 > len1) { pListHeadLong = pHead1; pListHeadShort = pHead2; nLengthDif = len2 - len1; } //现在长链表走几步,再同时在两个链表上同时遍历 for(int i=0;i<nLengthDif;++i) pListHeadLong = pListHeadLong->next; while((pListHeadLong!=NULL)&&(pListHeadShort!=NULL)&&(pListHeadLong!=pListHeadShort)) { pListHeadLong = pListHeadLong->next; pListHeadShort = pListHeadShort->next; } //得到第一个公共节点 ListNode *CommonNode = pListHeadLong; //cout << "data: " << CommonNode->data << endl; return CommonNode; } int main() { linknode_t *H = CreateLink(); InitLink(H,5); ShowLink(H); linknode_t *H1 = CreateLink(); InitLink(H1,3); ShowLink(H1); ListNode *node = FindFirstCommonNode(H,H1); if(node != NULL) cout << "data: " << node->data << endl; else cout << "no CommonNode!" << endl; return 0; }
作者:逆袭之路
-------------------------------------------
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端