今天开始刷Leetcode上面的算法题。我会更新我刷题过程中提交的代码(成功和不成功的都有)和比较好的解法

第二题 Add Two Numbers

题目的意思:输入两个链表,这两个链表都是倒序的数字,相加后返回倒序的链表。比如:

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
(342 + 465 = 807)

我的解法

思路很简单,把两个链表分别转换成数字,相加后把结果再转换成链表

# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None class Solution:
# @param {ListNode} l1
# @param {ListNode} l2
# @return {ListNode}
def addTwoNumbers(self, l1, l2): #以上是leetcode给与的部分,下面开始编码
#分别把l1、l2转成正序的字符串
a=str(l1.val)
b=str(l2.val)
while l1.next != None:
a += str(l1.next.val)
l1 = l1.next
a = a[::-1] while l2.next != None:
b += str(l2.next.val)
l2 = l2.next
b = b[::-1] #获得两个数相加的值
c = int(a) + int(b)
#把c转换成逆序链表
li = ListNode(c%10) #头结点
if c//10 < 1: #当c只是一位数的时候
return li
#c为多位数,思路是对c/10求余数,把余数放在节点的值中,连接各节点
c = c//10
tem = li
while c//10 >= 1:
t = ListNode(c%10)
tem.next = t
tem = t
c = c//10
#把最后一位放入节点
t = ListNode(c)
tem.next = t
return li

以上是我的解法,虽然通过了测试,但是执行的时间有193ms,在python中算比较慢的了...

所以我去网上找了更好的解法:

# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None class Solution:
# @return a ListNode
def addTwoNumbers(self, l1, l2): #以上是leetcode给与的部分,下面开始编码
dummy, flag = ListNode(0), 0
head = dummy #dummy是头结点,无意义
while flag or l1 or l2:
node = ListNode(flag)
if l1:
node.val += l1.val
l1 = l1.next
if l2:
node.val += l2.val
l2 = l2.next
flag = node.val / 10 #注意这个flag,在下一次新建节点的时候会把flag的值给该节点
node.val %= 10
head.next = node
head = head.next # head.next, head = node, node
return dummy.next

第三题 Longest Substring Without Repeating Characters

题目的意思:给一个字符串,找出这个字符串中没有重复元素的最大子字符串,返回这个子字符串的长度

我的解法

我的思路是新建一个字符串(tem),依次从给予的字符串中读字符,如果tem没有该字符,则把该字符插入tem中,如果有该字符,则在tem中找出上次出现这个字符的位置post,并删除(0,post)的所有字符,然后把该字符插入tem,同时我新建了countmaxNum变量,用来记录最长子字符串的长度,返回maxNum

class Solution:
# @param {string} s
# @return {integer}
def lengthOfLongestSubstring(self, s): #以上是leetcode给与的部分,下面开始编码
tem = ''
count = 0
maxNum = 0
for i in range(len(s)):
if s[i] not in tem:
tem += s[i]
count += 1
maxNum = max(count, maxNum) else:
t = 0
for j in range(i):
if s[j] == s[i] and j >= t:
t = j
for x in range(t+1):
tem = tem[x+1:]
count -= 1
tem += s[i]
count += 1
print(tem)
return maxNum

可是这个代码提交上去后,给了我个Time Limit Exceeded(未通过),点开一看,看到了个超长的字符串未通过测试...时间过长

下面这个算法,大致思路和我上一个一样,但是使用了哈希表,让它来记录字符的索引,在哈希表中先把每个字符的值初始化为-1,出现第一次就把值改为该字符所在字符串的位置

class Solution:
# @param {string} s
# @return {integer}
def lengthOfLongestSubstring(self, s):
start = 0
maxNum = 0
dic = {}
for i in range(len(s)):
dic[s[i]] = -1
for i in range(len(s)):
if dic[s[i]] != -1:
while start <= dic[s[i]]:
dic[s[start]] = -1
start += 1
maxNum = max(maxNum, i-start+1)
dic[s[i]] = i
return maxNum

leetcode 算法刷题(一)的更多相关文章

  1. leetcode算法刷题(三)

    今天在刷了几道简单的动态规划后,又看了看string方面的题 第五题 Longest Palindromic Substring 题目的意思:求一个字符串的最长回文子串 分析:开始,我的想法是,现在字 ...

  2. leetcode算法刷题(五)——动态规划(三)

    今天的题目不是leetcode上面的.只是觉得动态规划还是不算很熟练,就接着找了点DP的题练练 最长递增子序列的长度 题目的意思:传入一个数组,要求出它的最长递增子序列的长度.例如:如在序列1,-1, ...

  3. leetcode算法刷题(四)——动态规划(二)

    又到了晚上,动态规划,开刷! 第121题 Best Time to Buy and Sell Stock 题目的意思:给予一个数组price,表示特定股票在某天的股价,里面第i个数表示第i天的价格.只 ...

  4. leetcode算法刷题(二)——动态规划(一)

    上次刷了五六道题,都是关于string处理的,这次想换个知识点刷一下,然后再回头刷string的题,当做复习.. 这几天主要会选择动态规划的题目,因为以前从没刷过这方面的东西,很多东西都不是很懂..就 ...

  5. Leetcode算法刷题:217和219题 Contains Duplicate

    从题目名字就可以看出这两道题是相似的,219是217的加强版 217:Contains Duplicate 题目 给予一个数组,判断是否有重复的元素.如果有就返回True,没有就返回False.以下是 ...

  6. Leetcode算法刷题:第100题 Same Tree

    Same Tree 题目 给予两棵二叉树,判断这两棵树是否相等(即各节点的值都一样) 解题思路 分别遍历两棵二叉树,并用列表分别存储这两棵树的节点的值,比较这两个列表就可以了 class Soluti ...

  7. Leetcode算法刷题:第14题 Longest Common Prefix

    Longest Common Prefix 题目 给予一个列表,元素为字符串,写一个程序找出最长公共前缀 解题思路 先比较两个字符串,如果第一个字符不一样,则返回空值,比较完成后,用这个公共字符串和下 ...

  8. Leetcode算法刷题:第112题 Path Sum

    Path Sum 题目 给予一个二叉树,和一个值su,寻找是否有一个从根节点到叶节点的和为su,有则返回True,没有为False.比如: 5 / \ 4 8 / / \ 11 13 4 / \ \ ...

  9. leetcode top-100-liked-questions刷题总结

    一.起因 宅在家中,不知该做点什么.没有很好的想法,自己一直想提升技能,语言基础自不必言,数据结构还算熟悉,算法能力一般.于是乎,就去刷一通题. 刷题平台有很多,我选择了在leetcode进行刷题.回 ...

随机推荐

  1. Android 使用BroadcastReceiver的几种方法

    发送自定义广播 全局广播 发送标准广播 1.定义广播接收器.(在发送广播前,需要先定义一个广播接收器,不然发了也是白发) public class MyBroadcastReceiver extend ...

  2. android的数据存储方式

    数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 ...

  3. Raknet实现的简单服务器与客户端的交互

    1. 首先下载Raknet的源代码,我用的是4.0的,不是最新的,解压后编译DLL工程,编译完成后进入解压的根目录下,进入Lib文件夹下找到RakNet_DLL_Debug_Win32.dll,  R ...

  4. python实现zabbix_sender的socket通信代码样例

    sk = socket.socket() sk.connect(self.ip_port) sk.settimeout(5) sk.sendall(b'ZBXD\x01') sk.sendall(b' ...

  5. Financial Management--hdu1064

    Financial Management Problem Description Larry graduated this year and finally has a job. He’s makin ...

  6. C语言基础07

    结构体与函数的区别: 1.函数是由相同数据类型的变量组成. 2.结构体可以有不同数据类型组合.可以包含char,int,float,数组等类型. struct 结构名称 { 数据类型 成员:   注意 ...

  7. 【配置】电信华为HG8245 无线路由器配置 有贴图

          引子:家里的电信无线路由器连接之后无法直接上上网,只能再次通过PPPoe方式拨号上网.经过网上查询和一番折腾之后,整理攻略如下. 1. 用超级用户登录192.168.1.1(默认密码) 用 ...

  8. ios中block中的探究

    http://blog.csdn.net/jasonblog/article/details/7756763

  9. hdu 2571 命运(dp)

    Problem Description 穿过幽谷意味着离大魔王lemon已经无限接近了! 可谁能想到,yifenfei在斩杀了一些虾兵蟹将后,却再次面临命运大迷宫的考验,这是魔王lemon设下的又一个 ...

  10. OC基础15:内存管理和自动引用计数

    "OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.什么是ARC? (1).ARC全名为A ...