剑指offer--algorithm4

在写之前,顺便逛了一下仁兄的主页,受益匪浅,把自己有所感悟的地方摘抄下来,慢慢领悟
关于效率--产能和产出

真正的效能应该包含两个要素:一是“产出”,即金蛋;二是“产能”——生产的资产或能力,即下金蛋的鹅。
在生活中“重蛋轻鹅”的人,最终会连这个产金蛋的资产也保不住。反之,“重鹅轻蛋”的人,最后自己都可能会被活活饿死,更不用说鹅了。
所以,效能在于产出与产能的平衡。

日常生活中,你是否曾为了多收获几枚金蛋而废寝忘食地工作,结果弄得精疲力竭,无法继续工作?其实若能好好睡一觉,那么第二天就会精力充沛,完成更多的工作,更好地迎接这一天的挑战。
再比如,你强迫别人按你的意志行事,结果却发现你们的关系变得空洞无物;反过来,如果你能用时用心经营人际关系,就能赢得信任与合作,通过开诚布公的交流获得实质性的进展。

对待爱

“可是没有爱,你让我怎么去爱呢?”
“老兄,爱是一个动词,爱的感觉是爱的行动所带来的成果,所以请你爱她,为她服务,为她牺牲,聆听她心里的话,设身处地为她着想,欣赏她,肯定她。你愿意吗?”
在所有进步的社会中,爱都是代表动作,但消极被动的人却把爱当做一种感觉。好莱坞式的电影就常灌输这种不必为爱负责的观念——因为爱只是感觉,没有感觉,便没有爱。事实上,任由感觉左右行为是不负责任的做法。

以一灌之的原则性---男人的一生应树立自始不变的价值观 目前做人最失败之处,摇摆不定,瞻前顾后,价值观匮乏

现在假定你已经买好票,准备晚上与配偶一起去听音乐会,对方兴奋不已,满怀期待。
可是下午四点钟,老板突然来电话要你晚上加班,理由是第二天上午九点钟有一个重要会议。
◆对以家庭或配偶为中心的人而言,当然是优先考虑配偶的感觉,为了不让他(她)失望,你很可能会委婉地拒绝老板。即使为了保住工作而勉强留下来加班,心里也一定十分不情愿,担心着配偶的反应,想着用什么合适的理由来平息他(她)的失望与不满。
◆以金钱为中心的人则看重加班费或加班对于老板调薪决策的影响,于是理直气壮地告诉配偶自己要加班,并理所当然地认为对方应该谅解,毕竟经济利益高于一切。
◆以工作为中心的人会觉得正中下怀,因为加班既可以让自己增加经验,又是一个很好的表现机会,有利晋升,所以不论是否需要,都会自动延长加班时间,并想当然地以为配偶会以此为荣,不会为爽约一事小题大做。
◆以名利为中心的人,会算计~下加班费能买到什么,或者考虑一下加班对个人形象有何助益,比如赢得一个为工作而牺牲自己的美誉。
◆以享乐为中心的人,即使配偶并不介意,也还是会撇下工作赴约,因为实在需要犒劳自己一下。

以原则为中心的人会保持冷静和客观,不受情绪或其他因素的干扰,综观全局——工作需要、家庭需要、其他相关因素以及不同决定的可能后果,深思熟虑后才做出正确的选择。

双赢思维--情侣之间,合作伙伴之间,如果不能双赢,宁可不做,毕竟互不相欠,任意无所的违心妥协,都是不正当的人际关系

在相互依赖的环境里,任何非双赢的解决方案都不是最好的,因为它们终将对长远的关系产生这样那样的不利影响,你必须慎重对待这些影响的代价。如果你无法同对方达成双赢的协议,那么最好选择放弃。
在家里,“不能双赢就干脆放弃”这个原则也能让大家感到轻松自由。如果在看什么电影的问题上僵持不下,那么不如放弃看电影,做些别的事情,总比这个夜晚有人欢喜有人愁的要好。

有效沟通、有效沟通、有效沟通--重要的事情说三遍,自己做的很失败! 关键在于抓重点、逻辑的清晰度、对整体事物的宏观把控

接下来进入正题

题7--查找和排序
查找的方法无外乎有三种--二分查找、哈希表查找、二叉排序树查找
排序的方法有--插入排序、冒泡排序、归并排序、快速排序

题目如下---旋转数组的最小数字

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。

本题可能遇到的情况有两种:
第一是第一个指针、第二个指针所指的数字和两个指针之间的数字不相同--二分查找
第一是第一个指针、第二个指针所指的数字和两个指针之间的数字相同--顺序查找
具体的思路,书中很清楚,摘录如下:


image.png

image.png
image.png

image.png

下面是程序的代码和注释:


class solution (object):
    def min_number(self,rotatearray):
        if len(rotatearray)==0:
            return 0
        front=0#前指针的位置
        last=len(rotatearray)-1#后指针的位置
        midindex=0#初始化中间索引的位置
        while rotatearray[front]>=rotatearray[last]:#第一种情况,使用二分查找
            if (int(last)-int(front))==1:#当两个指针的差值为1的时候,说明已经检索到位了
                midindex=last#将last的索引值赋值给midinex
                break#结束
            midindex=(int(front)+int(last))//2#整数除法,返回不大于该浮点值的整数,也就是前指针或者后指针所要移动的位置,重新定义中间索引的位置
            if rotatearray[front]==rotatearray[last] and rotatearray[last]==rotatearray[midindex]:#第二种情况当头指针的数字,与尾指针的数字以及中间位置的数字相同时,采用顺序查找法
                return self.equal(rotatearray,front,last)#调用下一个方法
            if rotatearray[front]<=rotatearray[midindex]:
                front=midindex#挪动前指针的位置
            if rotatearray[midindex]<=rotatearray[last]:
                last=midindex#挪动后指针的位置
        return rotatearray[midindex]#当第一个指针所指的数字小于另外一个指针所指的数字的时候,比如[1,2,3,4,5],那么就返回midindex=0,即序列中的第一个数
    def equal(self,rotatearray,first,end):#第二种情况顺序方法
        result=rotatearray[0]#初始化要进行比较的数据
        for i in rotatearray[first:end+1]:
            if i<result:
                result=i#赋值,逐一比较
        return result 
    
                


def main():
    test=solution()
    #minnumber=test.min_number([3,4,5,1,2])
    minnumber=test.min_number([1,2,3,4,5])
    print (minnumber)
    
if __name__=='__main__':
    main()

题8--递归和循环

递归一般代码简洁,由于循环的代码,但是也有其缺点,递归为函数自己调用自己,每一次调用都需要在内存栈中分配空间以保存参数、返回地址和临时变量、往栈里压入和弹出数据都需要时间

题目如下--斐波那契数列

当数的个数为零时,返回零、数的个数为1时返回1,数的个数大于1时,后一个数为前两个数的和
斐波那契函数的变种题即为青蛙跳,关于两者的联系,书中是这样介绍的:

image.png

代码和注释:

"""
一般来讲斐波那契函数都是第一个数为0,第二个数为1
我在程序里稍作改动,可以更加灵活的改变斐波那契的前两个数
"""
class solution(object):
    def __init__(self,array,n):
        self.array=array
        self.n=n 
    def fb(self):
        num=len(self.array)
        if int(num)==0:
            return 0
        if int(num)==1:
            return 1
        elif int(num)>1:
             return self.dg_solution(self.n)
    def dg_solution(self,m):
        if m<=len(self.array):
            return self.array[m-1]
        else:
             return (self.dg_solution(m-1)+self.dg_solution(m-2))
         
            
def main():
    test=solution([1,2],5)
    print (test.fb())
    
if __name__=='__main__':
    main()

多读书,树立坚定地人生观,坚持读完月童度河,下次见面,希望有新的书单list

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

推荐阅读更多精彩内容