美文网首页
剑指offer--algorithm4

剑指offer--algorithm4

作者: strive鱼 | 来源:发表于2018-05-04 16:51 被阅读0次

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

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

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

    对待爱

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

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

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

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

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

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

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

    接下来进入正题

    题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

    相关文章

      网友评论

          本文标题:剑指offer--algorithm4

          本文链接:https://www.haomeiwen.com/subject/qthdrftx.html