leetcode 算法刷题(一)
今天开始刷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,同时我新建了count和maxNum变量,用来记录最长子字符串的长度,返回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 算法刷题(一)的更多相关文章
- leetcode算法刷题(三)
今天在刷了几道简单的动态规划后,又看了看string方面的题 第五题 Longest Palindromic Substring 题目的意思:求一个字符串的最长回文子串 分析:开始,我的想法是,现在字 ...
- leetcode算法刷题(五)——动态规划(三)
今天的题目不是leetcode上面的.只是觉得动态规划还是不算很熟练,就接着找了点DP的题练练 最长递增子序列的长度 题目的意思:传入一个数组,要求出它的最长递增子序列的长度.例如:如在序列1,-1, ...
- leetcode算法刷题(四)——动态规划(二)
又到了晚上,动态规划,开刷! 第121题 Best Time to Buy and Sell Stock 题目的意思:给予一个数组price,表示特定股票在某天的股价,里面第i个数表示第i天的价格.只 ...
- leetcode算法刷题(二)——动态规划(一)
上次刷了五六道题,都是关于string处理的,这次想换个知识点刷一下,然后再回头刷string的题,当做复习.. 这几天主要会选择动态规划的题目,因为以前从没刷过这方面的东西,很多东西都不是很懂..就 ...
- Leetcode算法刷题:217和219题 Contains Duplicate
从题目名字就可以看出这两道题是相似的,219是217的加强版 217:Contains Duplicate 题目 给予一个数组,判断是否有重复的元素.如果有就返回True,没有就返回False.以下是 ...
- Leetcode算法刷题:第100题 Same Tree
Same Tree 题目 给予两棵二叉树,判断这两棵树是否相等(即各节点的值都一样) 解题思路 分别遍历两棵二叉树,并用列表分别存储这两棵树的节点的值,比较这两个列表就可以了 class Soluti ...
- Leetcode算法刷题:第14题 Longest Common Prefix
Longest Common Prefix 题目 给予一个列表,元素为字符串,写一个程序找出最长公共前缀 解题思路 先比较两个字符串,如果第一个字符不一样,则返回空值,比较完成后,用这个公共字符串和下 ...
- Leetcode算法刷题:第112题 Path Sum
Path Sum 题目 给予一个二叉树,和一个值su,寻找是否有一个从根节点到叶节点的和为su,有则返回True,没有为False.比如: 5 / \ 4 8 / / \ 11 13 4 / \ \ ...
- leetcode top-100-liked-questions刷题总结
一.起因 宅在家中,不知该做点什么.没有很好的想法,自己一直想提升技能,语言基础自不必言,数据结构还算熟悉,算法能力一般.于是乎,就去刷一通题. 刷题平台有很多,我选择了在leetcode进行刷题.回 ...
随机推荐
- codeforces #330 div2
A: #include<cstdio> #include<algorithm> #include<cmath> #include<map> #inclu ...
- [Effective Modern C++] Item 2. Understand auto type deduction - 了解auto类型推断
条款二 了解auto类型推断 基础知识 除了一处例外,auto的类型推断与template一样.存在一个直接的从template类型推断到auto类型推断的映射 三类情况下的推断如下所示: // ca ...
- python 2.6升级到2.7
CentOS 6.5上安装的python版本是2.6.6,不能满足我运行软件的要求,所以对python进行升级. 原以为这也就是安装个软件的事儿,在我求稳搜索一下了之后发现,也并不是那么单纯简单. 下 ...
- HTML5 canvas 在线画笔绘图工具(三)
组装画板(TDrawBuilder) 在这一小节中我们要把工具条和画板组装起来,让他们可以协同进行工作. 画板通过一个命名为TDrawBuilder来进行组装.在详细讲解TDrawBuilder对象之 ...
- 定制化Azure站点Java运行环境(5)
Java 8下PermGen及参数设置 在上一章节中,我们定制化使用了Java 8环境,使用我们的测试页面打印出了JVM基本参数,但如果我们自己观察,会发现在MXBeans中,没有出现PermGen的 ...
- PIE(二分) 分类: 二分查找 2015-06-07 15:46 9人阅读 评论(0) 收藏
Pie Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submissio ...
- kvm-GT
REF: http://los-vmm.sc.intel.com/wiki/How-to-setup-kvmgthttp://xenvgt.sh.intel.com/image/bdw-h/ Host ...
- Android的读写文件权限
设置文件生成的权限: public static boolean saveInfo( Context context, String userName, String userPass, int mo ...
- hdu 5501 The Highest Mark(贪心+01背包)
题意:类似cf的赛制,每道题目有A,B,C三个值,A表示初始分数,B表示每分钟题的分数会减少B,C表示做这道题需要C分钟,数据保证分数不会变为负数.现在给出比赛时长,问安排做题的顺序,求最大得分. 思 ...
- Period(kmp)
Period Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...