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进行刷题.回 ...
随机推荐
- JavaScript 字符串常用操作纪要
JavaScript 字符串用于存储和处理文本.因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 Cookie 时,在转换各种不同 Da ...
- shopnc数据库 批量修改商品价格
1.商品价格统一上调50 2.商品价格个别上调50 UPDATE `nc_goods` SET `goods_price` = `goods_price` +50 where goods_id!=10 ...
- mysql 根据规定的数组进行排序
最近在开发中遇到一个问题,我要根据一组商品的佣金进行排序和分页,可是佣金并不在商品表中,于是我就只能通过数组的操作把佣金计算出来,然后通过array_multisort()方法进行排序,可是无法做到分 ...
- lol.py
#!/usr/bin/env python # -*- coding: utf-8 -*- import os from twisted.application import service from ...
- 浅谈 qmake 之 shadow build(就是将源码路径和构建路径分开)
shadow build shadow build 是什么东西?就是将源码路径和构建路径分开(也就是生成的makefile文件和其他产物都不放到源码路径),以此来保证源码路径的清洁. 这不是qmake ...
- 顶尖数据挖掘开发平台(TipDM-D2)产品白皮书
顶尖数据挖掘开发平台 (TipDM-D2) 产 品 白 皮 书 广州泰迪智能科技有限公司 版权所有 地址: 广州市经济技术开发区科学城232号 网址: http ...
- 浅谈C语言中的强符号、弱符号、强引用和弱引用
摘自http://www.jb51.net/article/56924.htm 浅谈C语言中的强符号.弱符号.强引用和弱引用 投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2014- ...
- Makefile里面的$(MAKE)到底是啥
[已解决]Makefile里面的$(MAKE)到底是啥 [复制链接] http://bbs.chinaunix.net/thread-4164499-1-1.html make 定义了很多默认变量,像 ...
- smb相关资料
smb相关资料 看资料就上维基 https://en.wikipedia.org/wiki/Server_Message_Block#Implementation http://www.bing.co ...
- hdu 5606 tree(并查集)
Problem Description There is a tree(the tree is a connected graph which contains n points and n−1 ed ...