leetcode习题练习
day001 两数之和
#!user/bin/env python
# -*- coding:utf-8 -*-
#方法1
def Sum(nbs,tgt):
len_nums = len(nbs)
for i in range(len_nums):
for j in range(i+1,len_nums):
if nbs[i] + nbs[j] == tgt:
return [i,j]
print(Sum([2,7,11,15],9)) #方法2 二遍哈希表
def Sum(nums,tgt):
len_num = len(nums)
for i in range(len_num):
dif = tgt - nums[i]
if dif in nums[i+1:]:
return [i,nums[i+1:].index(dif)+i+1]
print(Sum([2,7,11,15],9)) #方法3 一遍哈希表
def Sum(nums,tgt):
len_num = len(nums)
for i in range(len_num):
dif = tgt - nums[i]
if dif in nums[:i]:
return [nums[:i].index(dif),i]
print(Sum([2,7,11,15],9))
day002 给定一个字符串,找出其中不含有重复字符的最长子串的长度
# global num
# 求出字符串最长长度,一次,无迭代(代码正确),求出最大值,代码错误!而且题目理解错误,只要求出数字即可!!!
# def func_str(x_li):
# num = 0
# for i in range(len(x_li)):
# li1.append(x_li[i])
# if num == 0:
# num = num + 1
# continue
# for j in range(len(li1)-1):
# if x_li[i] == li1[j]:
# return li1[:-1] #返回值形如['a','b','c']
# global num
# li1 = []
# li = list(input('>>>'))
# str_max = func_str(li)
# print(''.join(str_max)) #以下错误代码
def func_str(x_li):
num = 0
for i in range(len(x_li)):
li1.append(x_li[i])
if num == 0:
num = num + 1
continue
for j in range(len(li1)-1):
if x_li[i] == li1[j]:
return li1[:-1] #返回值形如['a','b','c']
global num
li1 = []
li = list(input('>>>'))
str_max = func_str(li)
print(''.join(str_max)) # 输入aaa 输出a
s = len(str_max)
while True:
li1.clear()
str_max1 = func_str(list(set(li)-set(str_max)))
# print(li2)
# li2 = func_str(li[s:-1])
if len(str_max1) > s:
str_max = str_max1
print(''.join(str_max)) #reference code 14行精简代码!!
def func_str(s):
max_len = 0
if s is None or len(s) == 0:
return max_len
str_dict = {}
one_max = 0
start = 0
for i in range(len(s)):
if (s[i] in str_dict) and (str_dict[s[i]] >= start): #字典中的数要从start算起,并且s[i]存在于i以后的字典中
start = i
print(str_dict[s[i]]) #测试用
one_max = i - start + 1
str_dict[s[i]] = i #字典不允许key,value重复
# print(str_dict[s[i]])
# print(str_dict[s[i]])
max_len = max(max_len, one_max)
return max_len
print(func_str('abc123abcefghi1231234567890zxcvbnmasdfghjkl'))
day003 整数反转,给出一个32位的有符号整数,你需要将这个整数中每位上的数字进行反转
str = input('>>>')
li = []
for i in str:
li.append(i)
if li[0] is '-':
li.pop(0)
li.reverse()
print(''.join(li),end='')
print('-')
else:
li.reverse()
print(li)
for i in li:
if i == '':
li.pop(int(i))
# print(li)
elif int(i) is not 0:
print('yes')
print(''.join(li))
break
day004 最长回文字串:给定一个字符串s,找到s中最长的回文子串。假设s的最大长度为1000. 回文子串定义:如level,noon
#判断一个固定长度字符串是否回文的3中方法
方法1_字符串逆序法
def is_palindrome1(text):
l = list(text)
l.reverse()
t1 = ''.join(l)
if t1 == text:
print 'the text is palindrome'
else:
print 'the text is not palindrome' 方法2_字符串逆序索引
def is_palindrome2(text):
t1 = text[::-1]
if t1 == text:
print 'the text is palindrome'
else:
print 'the text is not palindrome' 方法3_传统法,s[len(s)-x-1] == s[x] ??
def is_palindrome3(text):
r = True
for x in range(len(text)):
print x,text[x]
if text[x] != text[len(text)-x-1]:
print 1
r = False
break
if r == True:
print 'the text is palindrome'
else:
print 'the text is not palindrome' #中心扩展法 代码好像有点问题,3.5revision!
def huiwen(str):
str_max = ''
for i in range(2*len(str)-1):
#偶数情况 如在12321中i==2,为偶数情况
if i % 2 == 0:
start = end = i // 2 #/整除
while start >= 0 and end < len(str) and str[start] == str[end]:
start -= 1
end += 1
#奇数情况
else:
start = (i-1)//2
end = (i-1)//2
while start >= 0 and end <= len(str) and str[start] == str[end]:
start -= 1
end += 1
if len(str) <= (end-start+1):
str_max = str[start+1:end]
return str_max
print(huiwen('cbbd'))
本代码编写分两步,1向字符串中插入'#',字符串首尾+‘#’;2字符串中以每个元素为中心进行扩展,查找最大回文字符串。
def max_huiwen(string):
li = [i for i in string]
newli_list = '#' + '#'.join(li) + '#'
max_str = 0
length = len(newli_list)
for index in range(0,length):
max_substr = get_length(newli_list,index)
if max_substr > max_str:
max_str = max_substr
return max_str
def get_length(s_li,index):
length = len(s_li)
submax_str = 0
for i in range(1,index+1):
if index+i < length and s_li[index-i] == s_li[index+i]:
submax_str = submax_str + 1
else:
break
return submax_str
res = max_huiwen('13553143211234321123aaaaaaaaaaaaaaaaaa')
print(res)
day005 有两个有序数组,求他们的中位数,如num1=[1,3],num2=[2,4] 中位数是(2+3)/2=2.5;再如num1=[1,3],num2=[2] 中位数是2. num1 = [1,3,5,6,7,9,11,22]
num2 = [2,4,5]
def medium1(num1):
# num = num1 + num2
# sorted(num)
length1 = len(num1) if length1 % 2 == 0: #length1长度为偶数
res1 = (num1[length1//2] + num1[length1//2-1])/2
return res1
else: #length1为奇数
res1 = num1[(length1-1)//2]
return res1
def medium2(num1):
length2 = len(num2)
if length2 % 2 == 0: #length2长度为偶数
res2 = (num2[length2//2] + num2[length2//2-1])/2
return res2
else: #length2为奇数
res2 = num2[(length2-1)//2]
return res2
a = medium1(num1)
b = medium1(num2)
print((a+b)/2)
day005 将罗马字符转换为阿拉伯数字:算法,字符串左边小于右边,累加;左边大于右边,左边数字 - 2*右边数字
def func(roman_substr):
res = 0
dic = {
'I':1,
'V':5,
'X':10,
'L':50,
'C':100,
'D':500,
'M':1000
}
for i in range(0,len(roman_substr)):
if i == 0 or dic[roman_substr[i]] <= dic[roman_substr[i-1]]:
res += dic[roman_substr[i]]
else:
res += dic[roman_substr[i]] - 2*dic[roman_substr[i-1]]
return res
roman_str = ['DII','XV','MDCLXVI','XII','VIII','XCIX','XII']
for roman_substr in roman_str:
print(func(roman_substr))
day007 输入的一个字符串和总行数,按照zigzag类型输出,如输入‘HKTSUOFFER’,3;输出HUEKTOFRSF(18行代码!) def zigzag(s, nRows):
if s == '' or nRows <= 1:
return s
li = []
size = 2*nRows-2
for i in range(nRows):
j = i #values of lines from this one
if i == 0 or i == nRows-1:
while j < len(s):
li.append(s[j])
j +=size #algorithm1 for initial and end lines
else:
while j < len(s):
li.append(s[j])
j += size-2*i #algorithm2 for uninitial and unend lines
return li
res = zigzag('HKSTUOFFER', 3)
print((''.join(res)).upper())
day006 Regular Expression Matching, 规则1 '.'可以匹配任何字母,‘*’可以重复一次‘*’之前的一个字母;规则2 输入两个字符串a和b,如b能覆盖a,返回True,否则返回False. 如1输入’ab‘和‘a*’ 返回False. 如2输入'aa'和‘a*’ 返回True.
def judge_twostr():
str = input('输入原字符串>>>')
str_li = []
str_str1 = ''
s = input('输入想要匹配的字符串>>>')
s_li = []
str_str2 = ''
for i in range(len(str)):
str_li.append(str[i])
for j in range(len(s)):
s_li.append(s[j])
for k in range(len(s_li)):
if s_li[k] == '.': #字符串中部遇到字符'.'
s_li[k] = str_li[k]
if s_li[k] == '*': #字符串中部遇到字符‘*’
s_li[k] = s_li[k-1]
str_str1 += ''.join(str_li) #str_li和s_li转换为字符串
str_str2 += ''.join(s_li) #str_li 范围小 s_li范围大
if str_str2 in str_str1 or str_str1 == str_str2:
print('T')
else:
print('F')
if __name__ == '__main__':
judge_twostr()
# 复习字符串处理
def judge_twostr():
str = input('输入原字符串>>>')
li_str = list(str)
str_str1 = ''
s = input('输入想要匹配的字符串>>>')
li_s = list(s)
str_str2 = ''
for k in range(len(li_s)):
if li_s[k] == '.': #字符串中部遇到字符'.'
li_s[k] = li_str[k]
if li_s[k] == '*': #字符串中部遇到字符‘*’
li_s[k] = li_s[k-1]
str_str1 += ''.join(li_str) #str_li和s_li转换为字符串
str_str2 += ''.join(li_s) #str_li 范围小 s_li范围大
if str_str2 in str_str1 or str_str1 == str_str2:
print('T')
else:
print('F')
if __name__ == '__main__':
judge_twostr()
leetcode习题练习的更多相关文章
- 【sql】leetcode习题 (共 42 题)
[175]Combine Two Tables (2018年11月23日,开始集中review基础) Table: Person +-------------+---------+ | Column ...
- Day1_算法分析方法
课堂笔记: 程序执行效率影响因子: 输入:评估时使用最坏情况输入 输入大小:考虑n渐进∞ 机器执行效率: 忽略 两种排序算法比较 插入排序n2 归并排序nlgn 递归 技能1:评估多项式的时间级数θ ...
- 单链表反转的原理和python代码实现
链表是一种基础的数据结构,也是算法学习的重中之重.其中单链表反转是一个经常会被考察到的知识点. 单链表反转是将一个给定顺序的单链表通过算法转为逆序排列,尽管听起来很简单,但要通过算法实现也并不是非常容 ...
- Hello!GitHub 好用好玩值得收藏的开源项目集合~
这是我许久以来从各处发现的极佳开源项目,希望分享给大家~ 如果帮到你了,给我个赞好嘛 编程语言类 ️learn-go-with-tests(通过单元测试学Go) GitHub地址:https://gi ...
- LeetCode日常小习题
LeetCode练习题: 1.给定一个大小为 n 的数组,找到其中的众数.众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的,并且给定的数组总是存在众数. 示例 1: 输入 ...
- leetcode之 median of two sorted arrays
这是我做的第二个leetcode题目,一开始以为和第一个一样很简单,但是做的过程中才发现这个题目非常难,给人一种“刚上战场就踩上地雷挂掉了”的感觉.后来搜了一下leetcode的难度分布表(leetc ...
- Leetcode解题-树(5.0.0)基础类
与第二章类似,LeetCode指定了TreeNode实现.为了方便后续习题的编写和测试,创建一个基础父类,包含TreeNode实现,以及create()和print()创建和打印树的方法.其中crea ...
- Leetcode解题-链表(2.2.0)基础类
1 基类的作用 在开始练习LeetCode链表部分的习题之前,首先创建好一个Solution基类,其作用就是: Ø 规定好每个子Solution都要实现纯虚函数test做测试: Ø 提供了List ...
- [leetcode]Median of Two Sorted Arrays @ Python
原题地址:https://oj.leetcode.com/problems/median-of-two-sorted-arrays/ 题意:There are two sorted arrays A ...
随机推荐
- SQL Server数据归档的解决方案
SQL Server数据归档的解决方案 最近新接到的一项工作是把SQL Server中保存了四五年的陈年数据(合同,付款,报销等等单据)进行归档,原因是每天的数据增量很大,而历史数据又不经常使用, ...
- 让JSON.js完全适应.NET
动机:.net 默认的时间序列化方式为\/Date(数字 时区)\/,序列化成JSON在前端很难处理,有没有一种好的处理方式呢? 改进: JSON = new function(){ this.dec ...
- 普元eos、soa、esb
http://www.primeton.com/support/video.php http://www.primeton.com/products/bps/overview.php http://w ...
- Regex-Golf
A man, a plan: 判断回文,如果不确定串长度情况下可以考虑利用反向引用构造pattern,例如: (.)\1 , (.)(.)\2\1 , (.)(.)(.)\3\2\1 ...但这里只 ...
- string转数组, 数组转ist, list转数组, 数组转string
private string OrderBonds(string bonds) { string[] lists = bonds.Split(','); List<string> newL ...
- RabbitMQ环境安装及入门
1. 说明 在企业应用系统领域,会面对不同系统之间的通信.集成与整合,尤其当面临异构系统时,这种分布式的调用与通信变得越发重要.其次,系统中一般会有很多对实时性要求不高的但是执行起来比较较耗时的地方, ...
- IPFS初探
背景:听说IPFS=bittorrent+bitcoin+git+afs,有可能取代http,好像厉害的不行,所以要研究一下. 编译参考:https://github.com/ipfs/go-ipfs ...
- Excel遇到的坑lookup和vlookup的用法
lookup (第一种) lookup必选保证有序查询,学籍号是按顺序排的 如上表格,表格2的成绩输入到表格1成绩中 鼠标选择F3->公式->插入函数->搜索lookup 三个参数 ...
- Linux平台网络配置-----C语言
上一期我们已经介绍了VM虚拟机安装CentOS 7系统的步骤过程,这次就来看看使用Linux对初学者有什么障碍? 零基础学习C语言---Linux平台配置网络 用VM虚拟机启动Linux系统时出现的问 ...
- Windows 应用商店无法下载---启动更新
今天想在应用商店下载东西,但是以直没成功,查看原因结果是因为我的Windows自动更新关了. 百度,如何打开自动更新,要打开本地组策略编辑器,但是我是Windows家庭版,,,没有这个东西,, 最后, ...