今天开始刷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. Perfect Squares

    Perfect Squares Total Accepted: 18854 Total Submissions: 63048 Difficulty: Medium Given a positive i ...

  2. commands - `tar`

    remove files after pack: tar --remove-files -cf all.tar * compression: -j: bzip2 -z: gzip add file t ...

  3. oracle DBLink

    现有两个oracle DB为A和B,为了能在A数据库中对B数据库进行操作,我们需要在A数据库中建立对B的DBLink.    在创建DBLink之前,我们首先去检查下DB A的global_names ...

  4. Android 上传库到Binary的操作

    第一次,按照网上教程配置需要的配置文件,上传成功 1.0版本. 以后更新的时候 输入 : install ,执行task 然后再输入:bintrayUpload ,执行task,看下面控制台输出信息, ...

  5. 【Linux CentOS 在虚拟机中XShell出现: (port 22): Connection failed.】

    原因:没安装openssh-server组件!!!!!!!!!! 解决办法:yum install openssh-server 查看openssh-server是否启动: $:ps -ef |gre ...

  6. [置顶] lvs-tun隧道模式搭建

    一.lvs直接路由原理 由于图片还要一张一张上传,可以到下面网站下载我的word版本: http://download.csdn.net/user/y0908105023 补充基础知识: OSI(Op ...

  7. Hadoop--Hadoop的机架感知

    Hadoop的机架感知 Hadoop有一个“机架感知”特性.管理员可以手工定义每个slave数据节点的机架号.为什么要做这么麻烦的事情?有两个原因:防止数据丢失和提高网络性能.     为了防止数据丢 ...

  8. 必学100个常用linux命令大全

    1,echo “aa” > test.txt 和 echo “bb” >> test.txt //>将原文件清空,并且内容写入到文件中,>>将内容放到文件的尾部 2 ...

  9. linux之SQL语句简明教程---Alias

    接下来,我们讨论 alias (别名) 在 SQL 上的用处.最常用到的别名有两种: 栏位别名及表格别名. 简单地来说,栏位别名的目的是为了让 SQL 产生的结果易读.在之前的例子中,每当我们有营业额 ...

  10. leetcode_question_104 Maximum Depth of Binary Tree

    Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...