From 93b6613f685e36a2d4210fe14f46399f76f483d0 Mon Sep 17 00:00:00 2001 From: wycgi520 <437891878@qq.com> Date: Fri, 14 Dec 2018 15:55:19 +0800 Subject: [PATCH 1/2] modify --- ...81211-lengthOfLongestSubstring-Archer-1.py | 63 +++++++++++++++++++ ...81214-lengthOfLongestSubstring-Archer-2.py | 46 ++++++++++++++ ...ngestSubstring\350\257\264\346\230\216.md" | 16 ++++- Archer/readme.md | 3 + 4 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 Archer/lengthOfLongestSubstring/20181211-lengthOfLongestSubstring-Archer-1.py create mode 100644 Archer/lengthOfLongestSubstring/20181214-lengthOfLongestSubstring-Archer-2.py diff --git a/Archer/lengthOfLongestSubstring/20181211-lengthOfLongestSubstring-Archer-1.py b/Archer/lengthOfLongestSubstring/20181211-lengthOfLongestSubstring-Archer-1.py new file mode 100644 index 0000000..3986e2b --- /dev/null +++ b/Archer/lengthOfLongestSubstring/20181211-lengthOfLongestSubstring-Archer-1.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python +# -*- coding:utf-8 -*- + +s = "vdlkdk" +dict = {} +num = 0 +out = 0 +flag = 0 +i = 0 +#暴力法1:找到所有不重复的字符串 +''' +for i in range(0,len(s)) : + dict[s[i]] = i + num += 1 + for j in range(i+1,len(s)) : + if s[j] in dict : + break + dict[s[j]] = j + num += 1 + out = [num, out][out > num] + if out >= len(s) / 2 : + break + dict.clear() + num = 0 +''' + +#暴力法2:从输出长度out入手 +''' +for out in range(0,len(s)): + for i in range(0,out+1): + for j in range(i,i+len(s)-out): + if s[j] in dict: + dict.clear() + break + dict[s[j]] = j + else: + flag = 1 + if flag == 1: + break + if flag == 1: + break + +print len(s)-out +''' +#滑动法,当往右滑动到右重复字符时,从前面重复的那个字符后开始搜索,不断循环 +''' +n = len(s) +while i < n: + if s[i] in dict: + i = dict[s[i]] + 1 + out = [num, out][out > num] + num = 0 + dict.clear() + dict[s[i]] = i + num += 1 + i += 1 + continue + dict[s[i]] = i + num += 1 + i += 1 +out = [num, out][out > num] +''' + diff --git a/Archer/lengthOfLongestSubstring/20181214-lengthOfLongestSubstring-Archer-2.py b/Archer/lengthOfLongestSubstring/20181214-lengthOfLongestSubstring-Archer-2.py new file mode 100644 index 0000000..62a4eed --- /dev/null +++ b/Archer/lengthOfLongestSubstring/20181214-lengthOfLongestSubstring-Archer-2.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python +# -*- coding:utf-8 -*- + + +s = "" +set0 = set() +dict = {} +num = 0 +out = 0 +flag = 0 +i = 0 +j = 0 + +n = len(s) + + +# 索引i和j分别表示子字符串的起始和结束,如何有相同的字符,则一直把前面的删掉,知道没有重复为止 +''' +while i(j-i)] + else : + del dict[s[i]] + i += 1 +''' +# 直接找字符串,用find,如果找到,先得到字符串大小,再把索引i往前移到找到的索引,优点是不用一直把前面的删掉,进一步优化效率 + +j = 1 +i = 0 + + +while j Date: Tue, 18 Dec 2018 15:51:48 +0800 Subject: [PATCH 2/2] modify --- Archer/Happy Number/Happy Number.py | 28 +++++++++++++++++++ ...16\345\217\212\345\244\215\347\233\230.md" | 9 ++++++ Archer/readme.md | 3 ++ Archer/twoSum/twoSum.py | 7 ----- 4 files changed, 40 insertions(+), 7 deletions(-) create mode 100644 Archer/Happy Number/Happy Number.py create mode 100644 "Archer/Happy Number/Happy Number\350\257\264\346\230\216\345\217\212\345\244\215\347\233\230.md" diff --git a/Archer/Happy Number/Happy Number.py b/Archer/Happy Number/Happy Number.py new file mode 100644 index 0000000..3e0be3d --- /dev/null +++ b/Archer/Happy Number/Happy Number.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python +# -*- coding:utf-8 -*- + +class Solution(object): + def isHappy(self, n): + """ + :type n: int + :rtype: bool + """ + + dict_1 = {} + + while 1: + sum = 0 + + while n != 0: #计算平方之和 + sum += (n % 10) ** 2 + n /= 10 + + n = sum + + if n == 1: #如果平方之和为1,证明n是快乐数,返回True + return True + elif dict_1.has_key(n): #若平方之和已出现过(循环计算),证明加法之和不可能为1,n不是快乐数,返回False + return False + + dict_1[n] = 0 + diff --git "a/Archer/Happy Number/Happy Number\350\257\264\346\230\216\345\217\212\345\244\215\347\233\230.md" "b/Archer/Happy Number/Happy Number\350\257\264\346\230\216\345\217\212\345\244\215\347\233\230.md" new file mode 100644 index 0000000..05eb5af --- /dev/null +++ "b/Archer/Happy Number/Happy Number\350\257\264\346\230\216\345\217\212\345\244\215\347\233\230.md" @@ -0,0 +1,9 @@ +# 算法实现:(详细见代码文档) # + +#编写一个算法来判断一个数是不是“快乐数”。一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。 # + +# 复盘 # + +1. 用两个字典,一个字典存储加法结果各位数的平方,另一个字典存储平方之和 + +2. 用一个字典存储平方之和,判断有无循环即可,不需要存储各个平方,直接加在一起便是 \ No newline at end of file diff --git a/Archer/readme.md b/Archer/readme.md index 0322a5d..5bde0eb 100644 --- a/Archer/readme.md +++ b/Archer/readme.md @@ -1,3 +1,6 @@ +##1217-1219 打卡## +**编写一个算法来判断一个数是不是“快乐数”。一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。** + ##1213-1215 打卡## **给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。** diff --git a/Archer/twoSum/twoSum.py b/Archer/twoSum/twoSum.py index f7c49cf..062767c 100644 --- a/Archer/twoSum/twoSum.py +++ b/Archer/twoSum/twoSum.py @@ -50,13 +50,6 @@ def twoSum(nums, target): for i in range(0, k): temp = target - nums[i] if temp in map_a : - print map_a.items() return [map_a[temp], i] map_a[nums[i]] = i ''' - -a = [3, 3, 4, 5] - -b = twoSum(a,8) - -print b \ No newline at end of file