热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Leetcode刷题每日总结:2、3、124

2.两数相加给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的

2. 两数相加

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:


输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

思路:加法模拟;拿到这两个链表,如示例所给数据,我将每一位分别相加再存入新的链表中,比如第一个链表中的十位是4,第二任个链表中的十位是6,将两个数字相加,由于进位原因我们要定义一个变量存储加和,将加和模上10取个位的0存入新链表中,再将加和除以10保存进位数字,最后将剩余加和存入链表中。

解法:创建一个整形相加和,一个新链表,还有一个指向新链表表头的指针。首先遍历条件:当两个链表不为空时或者加和不为0时,给新链表赋空间,遍历链表,各判断两个是否为空,将非空的链表中的对应数字加入到加和上,处理加和,存入新链表,循环结束,新链表尾赋空,返回标记指针。


/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){int cnt = 0; //对位相加和struct ListNode *pnode = (struct ListNode*)malloc(sizeof(struct ListNode)); //存放新的求和struct ListNode *phead = pnode; //指向求和链表的头指针struct ListNode *pdel;while(l1 != NULL || l2 != NULL || cnt != 0) //循环条件:两个链表非空 对位相加和有进位{pnode->next = (struct ListNode*)malloc(sizeof(struct ListNode)); //mallocpnode = pnode->next;//如果两个链表上还有数字则相加:if(l1 != NULL){cnt += l1->val;l1=l1->next;}if(l2 != NULL){cnt += l2->val;l2=l2->next;}//将相加到的和取余得到一位存入ponde中pnode->val = cnt%10;cnt = cnt/10; //取相加和的最后一位}pnode->next = NULL;phead = phead->next; //指向pnode的真实头指针;free(pdel); //删除假的头指针return phead;
}

3. 无重复字符的最长子串

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:


输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:


输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:


输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

思路:’滑动块‘与哈希细想;如示例一,有多个符合题意的子串长度都为3,如'abc','bca',...如果强行遍历添加循环条件可能会导致时间复杂度过高,引起超时。所以将时间转化空间,遍历字符串,把没标记的a位置标记,再把b,c标记,再后面由于a位置已经标记,所以表示已经出现过,所以要把该字串的初始位置记录并后移,还有记录当前子串长度,每加入一个未标记过的字符,将长度加一。如示例3,遍历字符串,记录初始位置为0,p位置标记,长度加1,w位置标记,长度加一,w位置已标记,将记录位置后移至新的w,还要重新计算子串长度,继续此过程,直至遍历完比较出最大值为止。

解法:定义子串初始位置,子串长度值,最大比较值,字符位置记录数组。遍历字符串,判断字符是否标记,若为标记,则标记,并将子串长度加一,若已标记,则将子串初始位置后移到已标记字符记录位置的后一位更新记录位置,并重新计算子串长度值,比较符合题意的子串长度值,返回最大值。


int lengthOfLongestSubstring(char * s){int i,j;int start = 0; //初始位置int index[200] ; //记录位置int count =0 ; int max = 0; memset(index,-1,sizeof(index));for(i=0;i= start) //如果该位置的首次出现位置大于 初始位置,一开始是-1(没有){start = index[s[i]] + 1; //将子串 初始位置 向后移一位,count = i - start; //计算当前 子串 长度 }index[s[i]] = i; //把字符对应位置存入数组,count++; if(count > max) //比较最大子串长度{max = count;}}return max;
}

124. 二叉树中的最大路径和

给定一个非空二叉树,返回其最大路径和。

本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。

示例 1:


输入: [1,2,3]1/ \2 3输出: 6

示例 2:


输入: [-10,9,20,null,null,15,7]-10/ \9  20/  \15   7输出: 42

思路:递归。在该二叉树中找到任意路径,使权值最大。如示例一,路径即为树本身,变例1:如果将根节点的1换为-1,那么最大路径仍然是这条,只不过最大值为5.   变例2:将根节点换为-3,那么最大路径显然是右节点3,我首先拿到根节点,我们知道在二叉树选取路径中选择了一个节点,另一个节点则不可在选,在这个子树(二叉树)中,根节点值-3与左节点相加为-1,右节点相加为0,而这子树(二叉树)总和为2,而相比右节点的3小,所以选右节点 因此在树中我们要少选择带负的节点(子树),将变例2带入到示例2,根节点-10,左负右正,所以选择右子树。


/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/#define imin 0x80000000
class Solution {
public:int maxPathSum(TreeNode* root) {if(!root) return 0;int ans = imin; //结果findmax(root,ans); //最大路径函数return ans;}
private:
int findmax(struct TreeNode *root,int& ans)
{if(!root) return 0 ;int l = max(0,findmax(root->left,ans)); //取根左边大值->递归int r = max(0,findmax(root->right,ans));//取根右边大值->递归int sum = l+r+root->val; //得到子树左右总和ans = max(ans,sum); return max(l,r)+root->val; //取左/右最大值
}
};

 


推荐阅读
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 判断编码是否可立即解码的程序及电话号码一致性判断程序
    本文介绍了两个编程题目,一个是判断编码是否可立即解码的程序,另一个是判断电话号码一致性的程序。对于第一个题目,给出一组二进制编码,判断是否存在一个编码是另一个编码的前缀,如果不存在则称为可立即解码的编码。对于第二个题目,给出一些电话号码,判断是否存在一个号码是另一个号码的前缀,如果不存在则说明这些号码是一致的。两个题目的解法类似,都使用了树的数据结构来实现。 ... [详细]
  • 求数组中字符串的最长公共前缀(Java)
    求数组中字符串的最长公共前缀(牛客网—牛客题霸算法篇—NC55)题目描述给你一个大小为n的字符串数组strs,其中包含n个字符串,编写一个函数来查找字符串数组中的最长公共前缀,返回 ... [详细]
  • 第五章:集合01
    第三章:集合01一:集合的框架结构图1.集合和数组的区别:2.Collection集合的方法:publicclassCol ... [详细]
  • 点此学习更多SQL相关函数与字符串处理函数mysql函数一、简明总结ASCII(char)        返回字符的ASCII码值BIT_LENGTH(str)      返回字 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
  • 1Lock与ReadWriteLock1.1LockpublicinterfaceLock{voidlock();voidlockInterruptibl ... [详细]
author-avatar
陈芝麻烂谷子我勒个去
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有