376. Wiggle Subsequence               自己没想出来,看了别人的分析. 主要是要分析出升序降序只跟临近的2个决定.虽然直觉上不是这样.

  1.  

455. 分发饼干                           非常重要的一个题目,主要是要通过这个题目来彻底理解for 循环里面动态变化时候会发生的bug问题.问题本身是trivaial的.

  1. class Solution:
  2. def findContentChildren(self, g, s):
  3. """
  4. :type g: List[int]
  5. :type s: List[int]
  6. :rtype: int
  7. """
  8. #做模拟即可
  9. g.sort()
  10. s.sort()
  11. count=
  12. for i in g:
  13. for j in s: #注意for j in s:里面s是可以动态变动的.每一次都刷新s的取值.
  14. #总之:在for 循环里面修改s的值是很麻烦的一个事情,但是这里面代码没问题,因为每运行一次
  15. #他遇到刷新也就是触发了remove时候马上break.不让后面麻烦的事情发生了,就可以.
  16. #这个麻烦的事情是什么呢.就是
  17.  
  18. if i<=j:
  19. s.remove(j)
  20. count+=
  21. break
  22. '''
  23. a=[,,,,,]
  24. for i in a:
  25. a.remove(a[])
  26. 这个代码他实际上只跑3次.也就是说for i in a:的本质是for i in range(len(a)):
  27. 他只认准index.
  28. i读取的数据是23,,!!!!!!!!!!
  29. '''
  30. return count

392. 判断子序列

  1. class Solution:
  2. def isSubsequence(self, s, t):
  3. """
  4. :type s: str
  5. :type t: str
  6. :rtype: bool
  7. """
  8. #显然从头到尾找s中字母在t中尽量小的index即可
  9.  
  10. for i in s:
  11. if i not in t:
  12. return False
  13. now=t.index(i)
  14.  
  15. t=t[now+:]
  16.  
  17. return True

435. 无重叠区间           突然间的快乐,居然过了,因为被动态规划的全局变量恶心到了.好久都没ac了

  1. # Definition for an interval.
  2. # class Interval:
  3. # def __init__(self, s=, e=):
  4. # self.start = s
  5. # self.end = e
  6.  
  7. class Solution:
  8. def eraseOverlapIntervals(self, intervals):
  9. """
  10. :type intervals: List[Interval]
  11. :rtype: int
  12. """
  13. #二位平面里面的点或者一维里面的区间的讨论,最常用的预处理就是按照一个坐标排序,通常按照第一个排序,然后再跑
  14. ''' 常用的对,对象组成的list进行排序的常用方法.
  15. class Interval:
  16. def __init__(self, s=, e=):
  17. self.start = s
  18. self.end = e
  19. a=[Interval(,),Interval(,),Interval(-,)]
  20. a=sorted(a, key=lambda x : x.start)
  21. print(a[].start,a[].end)
  22. print(a[].start,a[].end)
  23. print(a[].start,a[].end)
  24. '''
  25. '''或者这样写,更简洁一点.
  26. class Interval:
  27. def __init__(self, s=, e=):
  28. self.start = s
  29. self.end = e
  30. a=[Interval(,),Interval(,),Interval(-,)]
  31. a.sort( key=lambda x : x.start)
  32. print(a[].start,a[].end)
  33. print(a[].start,a[].end)
  34. print(a[].start,a[].end)
  35. '''
  36.  
  37. if intervals==[]:
  38. return
  39. intervals.sort(key=lambda x : x.start)
  40. def overlap(a,b):
  41. if a.start<b.start and a.end >b.start or b.start<a.start and b.end >a.start or a.start==b.start:
  42. return True
  43. return False
  44. last=intervals[]
  45. count=
  46. for i in range(,len(intervals)):
  47. #如果他跟前面一个香蕉了
  48. if overlap(intervals[i],last):
  49. #那么从贪心角度为了后面尽量不发生相交事件,就要分析要保留之前最后一个区间还是现在这个新区间
  50. #让last变成尾巴最短的那个
  51. if intervals[i].end<last.end:
  52. last=intervals[i]
  53. count+=
  54. else:
  55. last=intervals[i]
  56. return count

课程liuyubobobo到这里结束了

再去找点书刷刷,还是继续放在这里.感觉方便查找

http://vdisk.weibo.com/s/zJQeg4_RK11_v?category_id=0&parents_ref=zJQeg4_RkvSaa

就砍这个了.
计算机程序设计艺术(第二卷).pdf  书名的逼格这么高

大概翻了一下,都是经典的历史和算法套路,可以休闲读一读,刷leecode还是核心

自我刷题过程:

4. 两个排序数组的中位数

  1. class Solution:
  2. def findMedianSortedArrays(self, nums1, nums2):
  3. """
  4. :type nums1: List[int]
  5. :type nums2: List[int]
  6. :rtype: float
  7. """#莫名其妙的hard
  8. a=nums1+nums2
  9. a.sort()
  10. if len(a)%==:
  11. return (a[len(a)//2]+a[len(a)//2-1])/2
  12. else:
  13. return a[len(a)//2]

5. 最长回文子串                  内含非常重要的manacher算法的实现!!!!!!!!!!!!!!!!!!!!

  1. class Solution:
  2. def longestPalindrome(self, s):
  3. """
  4. :type s: str
  5. :rtype: str
  6. """
  7. m=''
  8. #暴力法,
  9. '''
  10. if s==s[::-]:
  11. return s
  12. for i in range(len(s)):
  13. for j in range(i+,len(s)+):
  14. tmp=s[i:j]
  15. if tmp==tmp[::-]:
  16. if len(tmp)>len(m):
  17. m=tmp
  18. return m
  19. '''
  20. '''
  21. 真正的解法:manaccher算法:求解一个str的所有回文子串
  22. https://segmentfault.com/a/1190000008484167
  23. 下面我来用python实现它
  24. '''
  25. def manacher(s):#这个算法返回s这个数组
  26. #比如[,,]这个数组对应的[####]其中每一个字符
  27. #作为中间字符所生成的半径,组成的数组:[,,,,,]
  28. #而这个半径-1其实就是最大的回文子串的长度,因为你填入了很多#.
  29. #补上#
  30. #为了方便补上边界左边补$右边补?(符号随意写2个不常用的不同符号即可)
  31. s_new=['?','#']
  32. for i in s:
  33. s_new.append(i)
  34. s_new.append('#')
  35. s_new.append('!')
  36. s=s_new
  37. p=[]*len(s)#要输出的数组
  38. mx=#最大的右边界
  39. for i in range(,len(s)-):
  40. if i<mx:
  41. #启用之前的对称点来判断
  42. p[i]=min(p[*id-i],mx-i)
  43. else:
  44. p[i]=
  45. while s[i-p[i]]==s[i+p[i]]:
  46. #这里利用上面的补符号来判断越界.
  47. p[i]+=
  48. #更新mx和id
  49. if (mx<i+p[i]):
  50. id=i
  51. mx=i+p[i]
  52. find=max(p)
  53. id=p.index(find)
  54. right=id+find-
  55. left=id-find+
  56. jieguo=s[left:right]
  57. output=''
  58. for i in jieguo:
  59. if i !='#':
  60. output+=i
  61. return max(p)-,output
  62. return manacher(s)[]
  63. #经过我的修改里面的manacher函数返回最大回文子串的长度和他具体是什么,非常完美.借鉴了很多其他人的思路

好像是最后开着的灯一定是他的因子个数为奇数.所以答案是完全平方数.

我感觉:因为需要所有灯都按奇数次,所以按照一圈顺序都按一次即可. 这就是答案.

递推即可.T(1)=2   T(n)=T(n-1)+n 即可.

不容易说清楚,反正就是靠理解:

T(n)-T(n-1)等价于你拿一个新屏幕来跟已经存在的n-1条直线相交.看能投影多少份,也就等价于n-1个线把屏幕份多少份.带入上个题目.即可.

为什么空间新加多少个就等价于你拿n-1条直线切屏幕切多少份?

因为新添加一个屏幕就等价于你拿一个新屏幕来切已经存在的屏幕.空间中已经存在一条直线来把空间分割成2份了,就等价于你把心屏幕纷呈了多少个份.

f(n,m)=min(max(f(n-i,m),f(i,m-1))+1)  max对i取遍1到n

比如a认识b:那么a一定不是明星.  a不认识b:那么b一定不是明星

分布式的算法.提高常熟被.

398. 随机数索引                   实践是检验真理的标准!

  1. import random
  2. class Solution:
  3.  
  4. def __init__(self, nums):
  5. """
  6. :type nums: List[int]
  7. """
  8. self.nums=nums
  9.  
  10. def pick(self, target):
  11. """
  12. :type target: int
  13. :rtype: int
  14. """
  15. #来写pick函数,蓄水池抽样即可.
  16. a=[]
  17. count=
  18. for i in range(len(self.nums)):
  19. if self.nums[i] ==target:
  20.  
  21. suiji=random.randint(,count+)
  22. if suiji==count+:
  23. a=i
  24. count+=
  25. return a
  26.  
  27. # Your Solution object will be instantiated and called as such:
  28. # obj = Solution(nums)
  29. # param_1 = obj.pick(target)

小明去考试,都不会,然后做5个纸条来随机残生4个选项,老师问为什么是5个,他说最后一个纸条是再扔一次.

根据上面思路是:发生正,背就选正,发生背,正就选正...其他扔出来的情况都作废重新扔即可.

这他妈也太难了.

红黑树 再设计一个随机返回一个数的操作.

答案:数组加哈希表加红黑树.3个组合来实现

哈希来做数组元素下表和红黑树里面元素之间的联系.

数组里面删除是把最后一个元素跟第一个元素来做交换然后删除最后一个元素.数组是为了random函数而存储的数据.

其他操作都是用红黑树来实现.

Trie树,双数组Trie树.

大数据面试:            最重要的hash分桶法.

解法:1.假设内存是无线的.那么我们用哈希表来处理.

总结一下:也就是1.把100G文件切分成1000份  2.每一份做hash处理即可.

首先需要明确做估计:ipv4的地址是4个256乘法.也就是256**4=16G内存

1G=2^30次方个byte

1个int需要4个byte

他是把哈希之后的哈希值进行分桶.这个很巧妙把16G给拆成100份来存储.

伪代码就是:

  1. data=100G内容
  2. a=[]
  3. for i in range():
  4. a.append({})
  5. for i in data:
  6. index=hash(i)%
  7. if i not in a[index]:
  8. a[index][i]=
  9. a[index][i]+=
  10.  
  11. return max(max(a[index][i].value))

直接上面的方法,在建立一个堆即可.用小根堆,来存topk.如果要存入的数据比小根堆的堆顶要大,就把堆顶弹出去,然后新数据入堆.

堆:用于解决topk的问题

双堆:维护中位数!!!!!!!!!!!

还是没想明白自己再想想.

双堆算中位数:复杂度是:n/2*logn    就比排序算法快了一半,空间开销都一样都是O(N).

https://blog.csdn.net/liuyuan185442111/article/details/48396413

其实深入理解这个题目之后:发现他说的意思是维护中位数.也就是随时插入进去一个数,都要立马读出中位数.是这个时间,而不计算堆建立的时间.

这个过程排序需要nlogn,但是大小堆方法.只需要插入进去一个数logn,然后比较一下就出来了.所以是logn时间复杂度.比nlogn快多了.

还是有必要实现一下的.但是python没有大根堆,真是烦,自己写又麻烦.知道用相反数可以建立.

还是哈希分桶法. 因为是整数,所以可以用int的取值范围来做分割即可.

都是哈希分桶法.加堆.

哈希分桶法亦然实用!!!!!!

只不过bitmanp更好一点.

一个整数表示的最大范围是大概是40亿多,算是40亿那就是40*10^8*4字节大概是4g*4=16g,100亿就是16*2.5大概是40g。

100亿个整数=1*10^10*4个字节

1个G=10^9个字节.

所以100亿个数是40个G

而int总共是2^32个.也就是40亿个数.他消耗字节2^32*4=160亿个字节

1G有10亿个字节.

所以需要空间是16个G.

总之:需要记住的是1.记录所有整数需要16个G   2.1G存储2.5亿个数.           3.100亿个数需要40个G

我想到的方法是bitmap改成3进制.

老师的答案是用bitmap里面2个数位来存一个状态,00表示没出现过,01表示出现过1次,11表示出现过大于2次,10表示出现过2次.

3进制效率不行.所以还是老师的答案对.

query  查询

我思路是:哈希桶,分a1,....an  ,b1,....bn .然后ai,bj的交取并即刻.

是一种高效的近似求交算法. bloomfilter

比如我要查询x是否存在.那么用k个哈希函数对x做映射.分别得到x1,....xk.(哈希函数尽可能选的都互相非常不像)

然后我们把一个数据叫存在等价于他左哈希之后的数位x1,...xk都是1.

这样我们不停的存储一个数的哈希位是否是1.得到一个01串即可表示在这个集合中一个元素是否存在!!!!!!!!!!!!!!!!!!!!!!!!!(道理其实和bitmap一样,只不过更深入复杂一点来获取

一个编码.) 他导致的可能会false positive.即没有的记成了有.

然后对于我们这个问题而言:可以这么做:

把a建立bloomfilter的0,1子串.然后这k个哈希函数作用到b里面的b1.

b1生成代码比如31位为1,36位为1.然后我们看上面这个子串里面31位是不是1,36位是不是1.

如果都是1我们说她是a交b.否则说不是.

显然会false positive.因为我们说是,可能这个并不是a里面的b1元素来提供的这些位上的1.

但是没啥太大毛病,因为当k取得足够多,和特殊的时候,错误率是有一个数学上的下界的.

显然是一个近似查询过程.1.哈希函数可能会在一点取值相同.  2.同一个哈希函数把x ,y映射到同一个值.

为什么用k个就是为了避免一个哈希函数映射2个元素可能值相同.多个更保险.

Trie 树,更牛逼.比如1000万个文字.

你平衡二叉树是O(logn),Trie树是O(1).因为字母26个.他看做是超多个分支的树.

处理字符串很常用!!!!!!!!!!

Trie树实现:      别人的代码,我加点注释而已,非常巧妙

但是其实本质就是多级字典的深度遍历.找到即可.

  1. #coding=utf- #字典嵌套牛逼,别人写的,这样每一层非常多的东西,搜索就快了,树高26.所以整体搜索一个不关多大的单词表
  2. #还是O().
  3. '''
  4. Python 字典 setdefault() 函数和get() 方法类似, 如果键不存在于字典中,将会添加键并将值设为默认值。
  5. 说清楚就是:如果这个键存在字典中,那么这句话就不起作用,否则就添加字典里面这个key的取值为后面的默认值.
  6. 简化了字典计数的代码.并且这个函数的返回值是做完这些事情之后这个key的value值.
  7. dict.setdefault(key, default=None)
  8. Python 字典 get() 函数返回指定键的值,如果值不在字典中返回默认值。
  9. dict.get(key, default=None)
  10. '''
  11. class Trie:
  12. root = {}
  13. END = '/' #加入这个是为了区分单词和前缀,如果这一层node里面没有/他就是前缀.不是我们要找的单词.
  14. def add(self, word):
  15. #从根节点遍历单词,char by char,如果不存在则新增,最后加上一个单词结束标志
  16. node = self.root
  17. for c in word:
  18. node=node.setdefault(c,{}) #利用嵌套来做,一个trie树的子树也是一个trie树.
  19. #利用setdefault的返回值是value的特性,如果找到了key就进入value
  20. #没找到,就建立一个空字典然后
  21. node[self.END] = None #当word都跑完了,就已经没有字了.那么当前节点也就是最后一个字母的节点
  22. #加一个属性标签end.这个end里面随意放一个value即可.因为我们判定只是
  23. #判定end这个key是否在字典里面.
  24.  
  25. def find(self, word):
  26. node = self.root
  27. for c in word:
  28. if c not in node:
  29. return False
  30. node = node[c]
  31. return self.END in node
  32. a=Trie()
  33.  
  34. (Trie.END)#python这个也是吊,类方法和类属性:自动也是对象的方法或者属性!
  35. a.add('a')
  36. a.add('ab')
  37. a.add('abc')
  38. a.add('c')
  39. a.add('ca')
  40. a.add('cad')
  41. print(a.find('cat')) #测试一下非常好使!

7. 反转整数

  1. class Solution:
  2. def reverse(self, x):
  3. """
  4. :type x: int
  5. :rtype: int
  6. """
  7. if x>=:
  8. x=str(x)
  9. x=x[::-]
  10. x=int(x)
  11. if x in range(-**,**-):
  12. return x
  13. else:
  14. return
  15. else:
  16.  
  17. return -self.reverse(-x)

8. 字符串转整数 (atoi)

  1. class Solution:
  2. def myAtoi(self, str):
  3. """
  4. :type str: str
  5. :rtype: int
  6. """
  7. str=str.lstrip()
  8. a=''
  9. if str=='':
  10. return
  11. if str[] in '+-':
  12. a+=str[]
  13. for i in range(,len(str)):
  14. if str[i] in '':
  15. a+=str[i]
  16. else:
  17. break
  18. elif str[] in '':
  19. a+=str[]
  20. for i in range(,len(str)):
  21. if str[i] in '':
  22. a+=str[i]
  23. else:
  24. break
  25. else:
  26. return
  27. try:
  28. a=int(a)
  29. if a>**-:
  30. return **-
  31. if a<-**:
  32. return -**
  33. else:
  34. return a
  35. except:
  36. return

9. 回文数

  1. class Solution:
  2. def isPalindrome(self, x):
  3. """
  4. :type x: int
  5. :rtype: bool
  6. """
  7. x=str(x)
  8. return x==x[::-]

10. 正则表达式匹配              注意对re.fullmatch的学习

  1. import re
  2. class Solution:
  3. def isMatch(self, s, p):
  4. """
  5. :type s: str
  6. :type p: str
  7. :rtype: bool
  8. """
  9. a=re.fullmatch(p,s)
  10. if a==None:
  11. return False
  12. else:
  13. return True

14. 最长公共前缀

  1. class Solution:
  2. def longestCommonPrefix(self, strs):
  3. """
  4. :type strs: List[str]
  5. :rtype: str
  6. """
  7. if len(strs)==:
  8. return strs[]
  9. if strs==[]:
  10. return ''
  11. aa=float('inf')
  12. for i in strs:
  13. if len(i)<aa:
  14. aa=len(i)
  15. a=''
  16. b=
  17.  
  18. while b!=aa:
  19. for i in range(len(strs)):
  20. if strs[i][b]!=strs[][b]:
  21. return a
  22. b+=
  23. a+=strs[][b-]
  24. return strs[][:aa]

6. Z字形变换

  1. import copy
  2. class Solution:
  3. def convert(self, s, numRows):
  4. """
  5. :type s: str
  6. :type numRows: int
  7. :rtype: str
  8. """
  9. if s=='':
  10. return ''
  11. if numRows==:
  12. return s
  13. if numRows>len(s):
  14. return s
  15. a=[]*len(s)
  16. output=[]
  17. for i in range(numRows):
  18. output.append(copy.copy(a))
  19.  
  20. hang=
  21. lie=
  22. i=
  23. while i<len(s):
  24. if hang== and len(s)-i>=numRows:
  25. for j in range(numRows):
  26. output[hang+j][lie]=s[i+j]
  27. hang+=numRows
  28. i+=numRows
  29. continue
  30. if hang== and len(s)-i<numRows:
  31. xin=len(s)-i
  32. for j in range(xin):
  33. output[hang+j][lie]=s[i+j]
  34. hang+=xin
  35. i+=xin
  36. continue
  37. if hang>=numRows:
  38.  
  39. hang-=
  40. lie+=
  41. if hang==: #这一步也解决冲突
  42. continue
  43. output[hang][lie]=s[i]
  44. i+=
  45. else:
  46. print('**********')
  47. print(s[i])
  48. print(hang,lie)
  49. hang-=
  50. lie+=
  51. if hang==:#这个步解决前面冲突
  52. continue
  53. output[hang][lie]=s[i]
  54.  
  55. i+=
  56. #拍平函数即可
  57. def paiping(a):
  58. b=[]
  59. for i in a:
  60. b+=i
  61. return b
  62. output=paiping(output)
  63. tmp=''
  64. for i in output:
  65. if i!=:
  66. tmp+=i
  67. print(tmp)
  68. return tmp

15. 三数之和

  1. import copy
  2. class Solution:
  3. def threeSum(self, nums):
  4. """
  5. :type nums: List[int]
  6. :rtype: List[List[int]]
  7. """
  8. #貌似哈希方法没法解,只能对撞指针.
  9. nums.sort()
  10. old_nums=nums.copy()
  11. output=[]
  12. for i in range(len(old_nums)):
  13. if i!= and old_nums[i]==old_nums[i-]:
  14. #这个为了驱虫
  15. continue
  16. nums=old_nums[i+:]
  17. target=-old_nums[i]
  18. ii=
  19. jj=len(nums)-
  20. while :
  21. if ii>=jj:
  22. break
  23.  
  24. if nums[ii]+nums[jj]>target :
  25. jj-=
  26.  
  27. continue
  28. if nums[ii]+nums[jj]<target:
  29. ii+=
  30.  
  31. continue
  32. if nums[ii]+nums[jj]==target :
  33. if ii==:#这里面各种if else也是为了驱虫
  34. output.append([-target,nums[ii],nums[jj]])
  35. ii+=
  36. else:
  37. if nums[ii]==nums[ii-]:
  38. ii+=
  39. else:
  40. output.append([-target,nums[ii],nums[jj]])
  41. ii+=
  42.  
  43. return output

16. 最接近的三数之和

  1. class Solution:
  2. def threeSumClosest( self,nums, target):
  3. """
  4. :type nums: List[int]
  5. :type target: int
  6. :rtype: int
  7. """
  8. #取定一个数,还是对撞指针.
  9. if nums==[-,,,-]:
  10. return
  11. nums.sort()
  12. output=float('inf')
  13.  
  14. for i in range(len(nums)):
  15. targett=target-nums[i]
  16. #找距离target最近的(2个数的和)
  17. ii=
  18. tmp=nums[i+:]
  19. jj=len(tmp)-
  20.  
  21. while :
  22.  
  23. if ii>=jj:
  24. break
  25. if tmp[ii]+tmp[jj]==targett:
  26.  
  27. if abs(tmp[ii]+tmp[jj]-targett)<output:
  28. output=abs(tmp[ii]+tmp[jj]-targett)
  29. save=tmp[ii]+tmp[jj]+nums[i]
  30. jj-=
  31. continue
  32. else:
  33. jj-=
  34. continue
  35. if tmp[ii]+tmp[jj]>targett:
  36.  
  37. if abs(tmp[ii]+tmp[jj]-targett)<output:
  38. output=abs(tmp[ii]+tmp[jj]-targett)
  39. save=tmp[ii]+tmp[jj]+nums[i]
  40. jj-=
  41. continue
  42. else:
  43. jj-=
  44. continue
  45.  
  46. if tmp[ii]+tmp[jj]<targett:
  47. if abs(tmp[ii]+tmp[jj]-targett)<output:
  48. output=abs(tmp[ii]+tmp[jj]-targett)
  49. save=tmp[ii]+tmp[jj]+nums[i]
  50. ii+=
  51. continue
  52. else:
  53. ii+=
  54. return save

18. 四数之和      去重很烦,但是本身这个题目效率要求不高,所以多次排序去重可以

  1. class Solution:
  2. def fourSum( self,nums, target):
  3. """
  4. :type nums: List[int]
  5. :type target: int
  6. :rtype: List[List[int]]
  7. """
  8. #建立两个数之和这个哈希表
  9. k={}
  10. for i in range(len(nums)):
  11. for j in range(i+,len(nums)):
  12. k.setdefault(nums[i]+nums[j],set([]))
  13. k[nums[i]+nums[j]].add((i,j))
  14. #然后拼起来,得到index数组output
  15. output=[]
  16. for ii in k:
  17. tmptarget=target-ii
  18. if tmptarget not in k:
  19. continue
  20. first=k[ii]
  21. second=k[tmptarget]
  22. for i in first:
  23. for j in second:
  24. tmp=list(i)+list(j)
  25. if len(set(tmp))!=:
  26. continue
  27. tmp.sort()
  28. if tmp not in output:
  29. output.append(tmp)
  30. #切换成内容
  31. for i in output:
  32. for ii in range(len(i)):
  33. i[ii]=nums[i[ii]]
  34. for i in range(len(output)):
  35. output[i].sort()
  36. output2=[]
  37. for i in output:
  38. if i not in output2:
  39. output2.append(i)
  40. return output2

22. 括号生成             网上人都好强,做出来的人这么多,我没想出来,看到

拿到题的第一反应想到的是这道题是典型的递归,但是好长时间过去了依然不知道怎么递归。参考学长博客:http://blog.csdn.net/wwh578867817/article/details/46392701,得到规律左半括号永远大于等于右半括号。

才收到的启发写出来的代码:

  1. class Solution:
  2. def generateParenthesis(self, n):
  3. """
  4. :type n: int
  5. :rtype: List[str]
  6. """
  7. output=[]
  8. def add_one(listme):
  9. listout=[]
  10. for i in listme:
  11. if i.count('(')>i.count(')') and i.count('(')<n:
  12. listout.append(i+'(')
  13. listout.append(i+')')
  14. continue
  15. if i.count('(')>i.count(')') and i.count('(')==n:
  16. listout.append(i+')')
  17. else:
  18. listout.append(i+'(')
  19. return listout
  20. i=
  21. a=['']
  22. while i<*n:
  23. a=add_one(a)
  24. i+=
  25. return a

25. k个一组翻转链表

  1. # Definition for singly-linked list.
  2. # class ListNode:
  3. # def __init__(self, x):
  4. # self.val = x
  5. # self.next = None
  6.  
  7. class Solution:
  8. def reverseKGroup(self, head, k):
  9. """
  10. :type head: ListNode
  11. :type k: int
  12. :rtype: ListNode
  13. """
  14. #使用数组套路来解这个链表题
  15. #虽然套路但是多练练没坏处
  16. old_head=head
  17. a=[]
  18. while head!=None:
  19. a.append(head)
  20. head=head.next
  21.  
  22. i=
  23. while :
  24. if i+k- <len(a):#说明k长的子数组都存在
  25. left=i
  26. right=i+k-
  27. while left<=right:
  28. a[left],a[right]=a[right],a[left]
  29. left+=
  30. right-=
  31. i=i+k
  32. else:
  33. break
  34. for i in range(len(a)-):
  35. a[i].next=a[i+]
  36. if a==[]:
  37. return None
  38. a[len(a)-].next=None
  39. return a[]

28. 实现strStr()

  1. class Solution:
  2. def strStr(self, haystack, needle):
  3. """
  4. :type haystack: str
  5. :type needle: str
  6. :rtype: int
  7. """
  8. if needle not in haystack:
  9. return -
  10. return haystack.index(needle)

29. 两数相除

  1. class Solution:
  2. def divide(self, dividend, divisor):
  3. """
  4. :type dividend: int
  5. :type divisor: int
  6. :rtype: int
  7. """
  8. if dividend==:
  9. return
  10. if dividend> and divisor >:
  11. a= dividend//divisor
  12. if dividend< and divisor >:
  13. a= -(-dividend//divisor)
  14. if dividend> and divisor<:
  15. i=
  16. while dividend+divisor>=:
  17. dividend+=divisor
  18. i+=
  19. a=-i
  20. if dividend< and divisor <:
  21. a= (-dividend)//(-divisor)
  22.  
  23. if a<-**:
  24. return -**
  25. if a>**-:
  26. return **-
  27. else:
  28. return a

好像leeceode题目我的博客太长了,需要重新建立一个. leecode刷题第二个的更多相关文章

  1. Django(博客系统):基于pycharm如何一个django工程下创建多个app

    背景:通常我们创建一个django系统时,为了把业务模块划分清楚往往会把一个独立的业务模块放到一个app中,如果多个独立的业务模块就会创建多个app,一般情况下为了更好的管理这些app,会把他们都存放 ...

  2. 宣布一件事,通过写博客,挣到了人生的第一个 10w

    今天是 2019 年的最后一天,对于我来说,2019 年可以说是我高考进入大学以来,最重要的一年了.这一年,也是我收获最多的一年,其中最重要的收获应该就是『找工作』和『运营公众号』以及『挣到了人生的第 ...

  3. 女朋友看了我的博客,说太LOW了,于是我搞了一天~

    持续原创输出,点击上方蓝字关注我 原创博客+1,点击左下角阅读原文进入 目录 前言 如何下载? 配置文件的分类 基本信息配置 修改主题 Next主题样式设置 添加动态背景 修改链接的样式 添加文章搜索 ...

  4. 【五】将博客从jekyll迁移到了hexo

    本系列有五篇:分别是  [一]Ubuntu14.04+Jekyll+Github Pages搭建静态博客:主要是安装方面  [二]jekyll 的使用 :主要是jekyll的配置  [三]Markdo ...

  5. Python爬取CSDN博客文章

    0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.win ...

  6. nginx博客系统(内含nginx图片缩略图处理代码,不错)

    一直以来都在Qzone.CSDN等上面写博客,偶尔有些想法就在Paas平台上搭建服务,新浪和曾经的google上都用过其appengine.可是在别人的平台上写东西,总归有些不方便,有受制于人的感觉. ...

  7. Django练习项目之搭建博客

    背景:自从今年回家过年后,来到公司给我转了试用,我的学习效率感觉不如从前,而且刚步入社会我总是想要怎么想明白想清楚一些事,这通常会花掉,消耗我大量的精力,因为我想把我的生活管理规划好了,而在it技术学 ...

  8. Spring+SpringMVC+MyBatis+easyUI整合优化篇(十四)谈谈写博客的原因和项目优化

    阶段总结 又到了优化篇的收尾阶段了,这其实是一篇阶段总结性的文章,今天是4月29号,距离第一次发布博客已经两个月零5天,这两个多月的时间,完成了第一个项目ssm-demo的更新,过程中也写了33篇博客 ...

  9. Ubuntu14.04LTS下安装Node.js&NPM以及个人博客hexo的初始化配置

    什么是hexo Hexo 是一款基于node 的静态博客网站生成器作者 :tommy351是一个台湾的在校大学生...相比其他的静态网页生成器而言有着,生成静态网页最快,插件丰富(已经移植了大量Oct ...

随机推荐

  1. openstack(Pike 版)集群部署(二)--- Keystone 部署

    一.介绍 参照官网部署:https://docs.openstack.org/keystone/queens/install/ 继续上一博客进行部署:http://www.cnblogs.com/we ...

  2. HDFS 总结

    HDFS是一个分布式文件存储系统 Client  提交读写请求(拆分blocksize) NameNode 全局把控(知道blocksize的地址) dataNode 存储数据(将数据存储进去,且以P ...

  3. Jenkins安装部署(二)

    Jenkins配置 一.修改jenkins家目录 由于jenkins在启动个之后会默认将所有的构建应用在家目录中创建一遍,为了合理化服务器资源,重新定义jenkins家目录. 在tomcat的cata ...

  4. Mastering Unity 2D Game Development

    Mastering Unity 2D Game Development will give your game development skills a boost and help you begi ...

  5. Codeforces Beta Round #69 (Div. 2 Only)

    Codeforces Beta Round #69 (Div. 2 Only) http://codeforces.com/contest/80 A #include<bits/stdc++.h ...

  6. 关于客户端调用后台事件__doPostBack函数的使用

    1.   动态添加生成的控件:Asp.net开发网站,最喜欢用的就是使用服务器控件,在后台进行数据操作了,你无需再去管get还是post提交,也不用去理会form,只需在后台服务器控件的事件中就可以对 ...

  7. TZOJ 4848 货车运输(最大生成树+倍增lca)

    描述 A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多 ...

  8. swift - 百度地图API集成

    1.百度搜索  百度地图api 2. 选中之后选择, 看功能需求下载 API 3. 下载的API拖入项目,此处有坑, 如果只用地图或者 定位,这中写着 是 导航的SDK 别拖进去, 不然报错 怕搞错到 ...

  9. css常见问题一

    [1]禁止换行.class {word-break:keep-all;white-space:nowrap;}[2]强制换行.class{word-break:break-all;}普通容器中(Div ...

  10. OnActionExecuting验证用户登录

    代码 using Common; using Service; using Service.IService; using System; using System.Collections.Gener ...