单例模式,用C#实现过单例模式,python区别就是类里边的静态方法写法不一样,python叫类方法,函数之前加@classmethod

  1. class Solution:
  2. # @return: The same instance of this class every time
  3. __m_Solution=None
  4.  
  5. @classmethod
  6. def getInstance(self):
  7. # write your code here
  8. if self.__m_Solution == None:
  9. self.__m_Solution=Solution()
  10. return self.__m_Solution
  11.  
  12. def __init__(self):
  13. pass

遍历二叉树路径,输出与给定值相同的所有路径,这里是递归调用的,本来像把递归改成循环的 但是高了好久 没搞出来····

  1. class Solution
  2. # @param {int} target an integer
  3. # @return {int[][]} all valid paths
  4. def binaryTreePathSum(self, root, target):
  5. # Write your code here
  6. res = []
  7. path = []
  8. import copy
  9. def getallpath(current, path, res):
  10. if current == None: return
  11. path.append(current.val)
  12. if current.left != None:
  13. getallpath(current.left,copy.deepcopy(path), res)
  14. if current.right != None:
  15. getallpath(current.right,copy.deepcopy(path),res)
  16. if current.left is None and current.right is None:
  17. res.append(path)
  18.  
  19. getallpath(root,path,res)
  20. ps=[]
  21. for p in res:
  22. sum=0
  23. for v in p:
  24. sum=sum+v
  25. if sum==target:ps.append(p)
  26. return ps

三角形计数 给定一个整数数组,在该数组中,寻找三个数,分别代表三角形三条边的长度,问,可以寻找到多少组这样的三个数来组成三角形

直接遍历会提示超过时间限制

选择排序加二分查找的方法来提高效率,python默认的递归有上线,需要设置,  还有二分查找的方法是先确认最大最小边然后找第三边,这样条件就变成一个

  1. class Solution:
  2. # @param S: a list of integers
  3. # @return: a integer
  4. def triangleCount(self, S):
  5. # write your code here
  6. def quicksort(a): # 快速排序
  7. if len(a) < 2:
  8. return a
  9. else:
  10. pivot = a[0]
  11. less = [i for i in a[1:] if i <= pivot]
  12. greator = [i for i in a[1:] if i > pivot]
  13. return quicksort(less) + [pivot] + quicksort(greator)
  14.  
  15. n = len(S)
  16. if n < 3: return
  17. import sys
  18. sys.setrecursionlimit(1000000)
  19. S = quicksort(S)
  20. sum = 0
  21. for i in range(n):
  22. for j in range(i + 1, n):
  23. l = i + 1
  24. r = j
  25. target = S[j] - S[i]
  26. while l < r:
  27. mid = (l + r) // 2
  28. if S[mid] > target:
  29. r = mid
  30. else:
  31. l = mid + 1
  32. sum = sum + j - l
  33.  
  34. return sum

将一个二叉查找树按照中序遍历转换成双向链表。

  1. """
  2. Definition of TreeNode:
  3. class TreeNode:
  4. def __init__(self, val):
  5. this.val = val
  6. this.left, this.right = None, None
  7. Definition of Doubly-ListNode
  8. class DoublyListNode(object):
  9.  
  10. def __init__(self, val, next=None):
  11. self.val = val
  12. self.next = self.prev = next
  13. """
  14.  
  15. class Solution:
  16. """
  17. @param root, the root of tree
  18. @return: a doubly list node
  19. """
  20. def bstToDoublyList(self, root):
  21. # Write your code here
  22. l=[]
  23. if root is None:return
  24. stack=[]
  25. current=root
  26. dlist=None
  27. cur=None
  28. last=None
  29. while len(stack)> 0 or current is not None:
  30. while current is not None:
  31. stack.append(current)
  32. current=current.left
  33. current=stack.pop()
  34. l.append(current.val)
  35. cur=DoublyListNode(current.val)
  36. cur.prev=last
  37. if last is not None: last.next=cur
  38. last=cur
  39. if dlist is None :dlist=cur
  40. current=current.right
  41. return dlist

lintcode 刷题记录··的更多相关文章

  1. PE刷题记录

    PE刷题记录 PE60 / 20%dif 这道题比较坑爹. 所有可以相连的素数可以构成一张图,建出这张图,在其中找它的大小为5的团.注意上界的估算,大概在1W以内.1W内有1229个素数,处理出这些素 ...

  2. lintcode 刷题 by python 总结(1)

    博主之前在学习 python 的数据结构与算法的基础知识,用的是<problem-solving-with-algorithms-and-data-structure-using-python& ...

  3. leetcode刷题记录--js

    leetcode刷题记录 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但 ...

  4. Leetcode刷题记录(python3)

    Leetcode刷题记录(python3) 顺序刷题 1~5 ---1.两数之和 ---2.两数相加 ---3. 无重复字符的最长子串 ---4.寻找两个有序数组的中位数 ---5.最长回文子串 6- ...

  5. 刷题记录:[HarekazeCTF2019]encode_and_encode

    目录 刷题记录:[HarekazeCTF2019]encode_and_encode 一.知识点 JSON转义字符绕过 php伪协议 刷题记录:[HarekazeCTF2019]encode_and_ ...

  6. 刷题记录:[De1CTF 2019]Giftbox && Comment

    目录 刷题记录:[De1CTF 2019]Giftbox && Comment 一.知识点 1.sql注入 && totp 2.RCE 3.源码泄露 4.敏感文件读取 ...

  7. 刷题记录:[强网杯 2019]Upload

    目录 刷题记录:[强网杯 2019]Upload 一.知识点 1.源码泄露 2.php反序列化 刷题记录:[强网杯 2019]Upload 题目复现链接:https://buuoj.cn/challe ...

  8. 刷题记录:[XNUCA2019Qualifier]EasyPHP

    目录 刷题记录:[XNUCA2019Qualifier]EasyPHP 解法一 1.error_log结合log_errors自定义错误日志 2.include_path设置包含路径 3.php_va ...

  9. 刷题记录:[DDCTF 2019]homebrew event loop

    目录 刷题记录:[DDCTF 2019]homebrew event loop 知识点 1.逻辑漏洞 2.flask session解密 总结 刷题记录:[DDCTF 2019]homebrew ev ...

随机推荐

  1. Python编程中 re正则表达式模块 介绍与使用教程

    Python编程中 re正则表达式模块 介绍与使用教程 一.前言: 这篇文章是因为昨天写了一篇 shell script 的文章,在文章中俺大量调用多媒体素材与网址引用.这样就会有一个问题就是:随着俺 ...

  2. HTML DOM--基础概述

    DOM: Document Object Model(文档对象模型)的简写,那么,这是一种什么样的模型,简单点来说,就是将文档当成了一棵树.它独立于平台与语言,允许程序与脚本动态地访问.更新文档的结构 ...

  3. 采用轮询的方式检测串口输入&&采用中断的方式检测串口输入的区别!

    区别1:中断USART1_IRQHandler()不放进main(主函数)里,而轮询检测rcv()需要: 但是需要在主函数里对中断NVIC()进行初始化,因为所有程序都是从主函数开始一步一步执行,想要 ...

  4. du及df命令的使用

    在本文中,我将讨论 du 和 df 命令.du 和 df 命令都是 Linux 系统的重要工具,来显示 Linux 文件系统的磁盘使用情况.这里我们将通过一些例子来分享这两个命令的用法. du 命令 ...

  5. 解决重装 Oracle 出现的 INS-32025 问题,完全卸载 Oracle11g

    如果您要重装 Oracle,并且安装程序正在运行,请先关闭它. 完全卸载: 1.停止所有 Oracle 服务 2.通过开始菜单 Oracle Installation Products -> U ...

  6. 纯Python给ulaw wav文件加头

    最近在处理wav相关文件,碰见一工具产生的ualw文件不带header,顺手用python给wav格式文件加头处理,让普通播放器也能播放. (原文:http://www.cnblogs.com/ryh ...

  7. c# 短链接生成

    public static string GetShortUrl(string url) { //可以自定义生成MD5加密字符传前的混合KEY string key = DateTime.Now.To ...

  8. LinuxShell脚本基础 6-case...esac的使用和通配符

    1.case...esac的使用 #!/bin/bash echo "请输入编号 选择不同的显示文件和目录方式:" echo "1 - 普通显示" echo & ...

  9. CSS生成小三角

    前言:小三角的应用场景:鼠标移动到某个按钮上面,查看信息详情时,信息详情弹出框有时候会需要一个小三角. 代码如下: <div id='triangle'></div> #tri ...

  10. 使用ant宏定义任务

    基础basic.xml文件 <?xml version="1.0" encoding="UTF-8"?><project>    < ...