剑指offer --algorithm (持续更新)

操千曲而识谱,认千剑而知器,学而问者千篇,悟者为上

  • 题1---singleton 模式
该题的本意或者说想要达到的理想目的是:改变一个子类的属性,不管声明多少个新的不同的实例对象,其相应的属性值是一样的

在进行编码之前,预备知识有两点,一就是__ new _(cls)与_ init __ (self) 之间的区别,二就是super()单线程子类继承

  • 用一句话概括就是前者是声明的一个实例,而后者声明的是一个对象,直白的讲,比如你想要把一堆人分为一类,那么你需要先从这一堆人中找一个对象,然后自定义的给他声明一些属性(胡子,身高等)这就是init 初始化的作用,而你要判断这些属性适合不适合于其他的人,你就要从这堆人中找到一个人,而这个人就是你要研究的实例对象
...     def print_c(self): 
...       print"hello world!"
...        
class child(hello): 
...     def print_c(self): 
...         super(child,self).print_c() 
...          
 child().print_c() 
hello world!

下面开始解题
方法一:利用继承类来实现

class singleton1(object):
    def __new__(cls):
        if not hasattr(cls,'instance'):#当假设cls这个实例没有instance属性的时候
            ori=super(singleton1,cls)#将sington1作为cls的一个子类,重新定义了一个新的类
            cls.intsance=ori.__new__(cls)
        return cls.intsance
    
    
class my(singleton1):
    def __init__(self):
        self.a=1
    

def main():
    l1=my()
    l2=my()
    print (l1==l2)
    l1.a=3
    print (l2.a)
    print (l1.a)
   
    
if __name__=='__main__':
    main()

方法二:只需要super 声明的子类具有和原来的实例cls 具备同样的属性即可

class singleton(object):
    dic={}
    def __new__(cls):
        descent=super(singleton,cls)#声明一个子类
        descent.__dict__=cls.dic#子类和父类实例的属性相同
        return descent

class mysecond(singleton1):
     def __init__(self):
        self.a=1
    
def main():
    l1=mysecond()
    l2=mysecond()
    print (l1==l2)
    l1.a=3
    print (l2.a)
    print (l1.a)

方法三:最为简单,其本质上没有两个两个实例之间的互动,而是通过__ init __的属性初始化完成单线程的目的

class mythird(object):
    def __init__(self,a):
        self.a=a

def main():
    l1=mythird()
    l2=mythird()
    l1.a=3
    print (l2.a)
  • 题2---二维数组的查找
    查找一个数是否属于一个二维数组,原题信息如下截图:


    image.png

    解题的过程实际上就是选择algorithm 的过程,这也是为什么算法这么的重要,在该书中有这么一段话很值得算法研究人员的思考(可能对我这种菜鸟感触太大了),因此摘录下来:

当我们分析一个复杂的问题的时候,无从下手,或者后续步骤越来越复杂,使得开头容易,后续剪不断理还乱的思绪交叉,这时候就需要从一个简单的具体实例出发,试图寻找其普遍规律 ----书中以插找7为例,首先右上角9>7,因此根据二维数组的排布规律,可以删除该列,一直删除到前两列,由于2<7所以删除行,直到在 删除1前两行后,检测到7

  • 普适规律:首先选取右上角的数,如果该数字等于要查找的数,就停止查找,否则如果该数字大于要查找的数字,就删除对应的列,反之,就删除对应的行

下面为封装代码:

#二维数组的查找,算法就是根据书中的理念
import numpy as np 
import pandas as pd 
from pandas import Series
from pandas import DataFrame 
#下面的例子是以整数二维数组为例
class search(object):
    #在全局变量中定义一个array可以用np.arange(12).reshape((3,4))
    def __init__(self,array,target):
        self.array=array
        self.target=target
    def judge(self):
        list=[]
        if self.array==np.array(list):
            return False
    def num(self):
        row=int(np.shape(self.array)[0])#得到行数
        column=int(np.shape(self.array)[1])#得到列数
        return column,row
       
    def permit(self):
        if type(self.target)!=int:
            self.target=int(self.target)#对其格式进行匹配
    def finder(self):
        i,j=self.num()#通过num()方法拿到列数行数
        m=0#重新定义行数
        n=i-1#将列数赋值给n,之所以为i-1,是因为列索引是从0开始的
        while n>=0 and m<=(j-1):#当列数还在索引范围之内,且行数也在索引范围之内时
            if self.array[m][n]<self.target:#当右上角的数小于要查找的数字时
                j+=1#删除行
            elif self.array[m][n]>self.target:
                n-=1
            else:
                return True
        return False
        print ('the target was not in this aimed array')
                
        
        

        
 
def main():
    array=np.arange(12).reshape((3,4))
    s=search(array,8)
    s.finder()
     
if __name__=='__main__':
     main()
  • 最近在看了不起的匠人,希望能够静心,2018新年的第一集:“非静而无以为学,摒言、听步、闻鼠
  • 除去不可抗力因素外,希望能一日两题,持续更新
  • Freedom as autonomy
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,709评论 0 9
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,651评论 18 139
  • 作者/不同樊响 不羡鸳鸯不羡仙 同是文友相聚欢 凡事静心方能远 响彻云霄谱新篇
    不同樊响阅读 193评论 1 0
  • 哥本哈根13天减肥食谱 这份食谱完全从别处搬来的,自己吃的时候顺便拍了照,就发出来啦,没想到反响那么大,很多朋友都...
    纯莹一一奈希纯子阅读 243评论 0 2
  • 1. 如何全局安装一个 node 应用? 在终端输入npm install -g pkg pkg为安装包的名字pk...
    _李祺阅读 218评论 0 1