Giter Club home page Giter Club logo

python-offer's Introduction

《剑指Offer》面试题: Python实现

面试题4 替换空格

面试题6 重建二叉树

面试题16 反转链表

面试题18 树的子结构

面试题19 二叉树的镜像

面试题28 字符串的排列

面试题30 最小的k个数

面试题34 丑数

第6章 面试能力

面试题39 二叉树的深度

面试题44 扑克牌的顺子

面试题46 求1+2...+n

第7章 面试案例

python-offer's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

python-offer's Issues

13题开头有点错误

if node == link:  # 只有一个结点
    del node

这里 node == link 只有在node.next is None 的时候才是只有一个节点。
这里如果node也指向头节点的话也会符合 node == link ,但是并不是只有一个节点。
而且del node只是删除了node这个变量,其实链表根本没有做改变,里面所有节点都还在。

面试题 6 重建二叉树 的一处写法可以改进

root.right = construct_tree(preorder[-len(right):], right)

这里如果 right[] 的话,会导致 preorder[-len(right):] 的值变成该 preorder 的副本,前序遍历和中序遍历长度不一致,显然是不合理的。

应该写成

root.right = construct_tree(preorder[index + 1:], right)

或者对这一段重新整理一下

index = inorder.index(preorder[0])
root = TreeNode(preorder[0])
root.left = construct_tree(preorder[1:index + 1], inorder[0:index])
root.right = construct_tree(preorder[index + 1:], inorder[index + 1:])
return root

【疑问】面试2:实现单例模式

有一个疑问,通过 new 实现单例那段代码在多线程下运行还是做不到单例。比如线程 1 在执行完 if 语句且判 true 后,切换到线程 2 。线程 2 成功创建了一个实例。那么线程 1 再执行时又会创建一个实例。

import time

class SingleTon(object):
    _instance = {}
    def __new__(cls, *args, **kwargs):
        print(threading.current_thread())
        if cls not in cls._instance:
            print('Singleton __new__ is true')
            time.sleep(15)
            cls._instance[cls] = super(SingleTon, cls).__new__(cls, *args, **kwargs)

        return cls._instance[cls]

class Test(SingleTon):
    def __init__(self):
        print('test __init__')
        self.val = 2

def running():
    t1 = Test()
    print(id(t1))

import threading

th1 = threading.Thread(target=running, name='th1')
th2 = threading.Thread(target=running, name='th2')
th1.start()
th2.start()
##### 输出 #####
<Thread(th1, started 2736)>
Singleton __new__ is true
<Thread(th2, started 3728)>
Singleton __new__ is true
test __init__
2210173698000
test __init__
2210173726848

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.