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习题练习的更多相关文章

  1. 【sql】leetcode习题 (共 42 题)

    [175]Combine Two Tables (2018年11月23日,开始集中review基础) Table: Person +-------------+---------+ | Column ...

  2. Day1_算法分析方法

    课堂笔记: 程序执行效率影响因子: 输入:评估时使用最坏情况输入 输入大小:考虑n渐进∞ 机器执行效率: 忽略 两种排序算法比较 插入排序n2 归并排序nlgn 递归 技能1:评估多项式的时间级数θ ...

  3. 单链表反转的原理和python代码实现

    链表是一种基础的数据结构,也是算法学习的重中之重.其中单链表反转是一个经常会被考察到的知识点. 单链表反转是将一个给定顺序的单链表通过算法转为逆序排列,尽管听起来很简单,但要通过算法实现也并不是非常容 ...

  4. Hello!GitHub 好用好玩值得收藏的开源项目集合~

    这是我许久以来从各处发现的极佳开源项目,希望分享给大家~ 如果帮到你了,给我个赞好嘛 编程语言类 ️learn-go-with-tests(通过单元测试学Go) GitHub地址:https://gi ...

  5. LeetCode日常小习题

    LeetCode练习题: 1.给定一个大小为 n 的数组,找到其中的众数.众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的,并且给定的数组总是存在众数. 示例 1: 输入 ...

  6. leetcode之 median of two sorted arrays

    这是我做的第二个leetcode题目,一开始以为和第一个一样很简单,但是做的过程中才发现这个题目非常难,给人一种“刚上战场就踩上地雷挂掉了”的感觉.后来搜了一下leetcode的难度分布表(leetc ...

  7. Leetcode解题-树(5.0.0)基础类

    与第二章类似,LeetCode指定了TreeNode实现.为了方便后续习题的编写和测试,创建一个基础父类,包含TreeNode实现,以及create()和print()创建和打印树的方法.其中crea ...

  8. Leetcode解题-链表(2.2.0)基础类

    1 基类的作用 在开始练习LeetCode链表部分的习题之前,首先创建好一个Solution基类,其作用就是: Ø  规定好每个子Solution都要实现纯虚函数test做测试: Ø  提供了List ...

  9. [leetcode]Median of Two Sorted Arrays @ Python

    原题地址:https://oj.leetcode.com/problems/median-of-two-sorted-arrays/ 题意:There are two sorted arrays A ...

随机推荐

  1. arrow function、function.apply

    An arrow function expression has a shorter syntax than a function expression and does not have its o ...

  2. 数据结构与算法之PHP排序算法(堆排序)

    一.堆的定义 堆通常是一个可以被看做一棵树的数组对象,其任一非叶节点满足以下性质: 1)堆中某个节点的值总是不大于或不小于其父节点的值: 每个节点的值都大于或等于其左右子节点的值,称为大顶堆.即:ar ...

  3. 记不住的Android活动的生命周期

    Activity基类定义了管理一个互动的生命周期的一系列事件. Activity生命周期的一系列事件onCreate()——当前活动首次被创建时使用.onStart()——当前活动对用户可见时调用.o ...

  4. Angular - - ng-focus、ng-blur

    1.ng-focus 这个指令功能就是比如当一个input等获取到焦点的时候,执行你指定的表达式函数,达到你需要的目的 格式:ng-focus=“value” value:获取焦点时执行的表达式,方法 ...

  5. Linq中datetime的处理以及asp.net下拉列表控件的selectitem,text等的设置显示处理

    dhl:报错:LINQ to Entities 不支持指定的类型成员“Date” Linq如: var v = from l in _dal.Share where l.PingcoId == pin ...

  6. Spring Boot + Spring Cloud 实现权限管理系统 权限控制(Shiro 注解)

    技术背景 当前,我们基于导航菜单的显示和操作按钮的禁用状态,实现了页面可见性和操作可用性的权限验证,或者叫访问控制.但这仅限于页面的显示和操作,我们的后台接口还是没有进行权限的验证,只要知道了后台的接 ...

  7. 最短路,floyd算法,图的最短路径

    题目描述: 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线 ...

  8. 我的第一个爬虫程序:利用Python抓取网页上的信息

    题外话 我第一次听说Python是在大二的时候,那个时候C语言都没有学好,于是就没有心思学其他的编程语言.现在,我的毕业设计要用到爬虫技术,在网上搜索了一下,Python语言在爬虫技术这方面获得一致好 ...

  9. DAX创建带有过滤器的超链接

    在这篇文章中,我们将创建一个DAX公式,根据报表中的过滤器生成超链接. 该度量包含2个部分,第一部分是使用DAX生成目标报告的正确URL,第二部分是将过滤器传递给该报告. 浏览器支持的MAX网址长度定 ...

  10. jQuery ajax瀑布流加载静态的列表页面

    1.加载一行数据 <script> //滚动加载事件 var Loadurl = "{$url}"; if(window.location.href !== Loadu ...