算法进阶3-2

来源:互联网 发布:阿里云销售工资 编辑:程序博客网 时间:2024/06/05 20:45

题目一:

设计可以变更的缓存结构。

【题目】

        设计一种缓存结构,该结构在构造时确定大小,假设大小为K,并有两个功能:

                (1)set(key, value):将记录(key, value)插入该结构。

                (2)get(key):返回key对应的value值。

【要求】

        (1)set和get方法的时间复杂度为O(1)。

        (2)某个key的set和get操作一旦发生,认为这个key的记录成了最经常使用的。

        (3)当缓存的大小超过K时,移出最不经常使用的记录,即set或get最久远的。

【举例】

        假设缓存结构的实例是cache,大小为3,并依次发生如下行为:

                1.cache.set("A", 1)。最经常使用的记录为("A", 1)。

                2.cache.set("B", 2)。最经常使用的记录为("B", 2),("A", 1)变为最不经常的。

                3.cache.set("C", 3)。最经常使用的记录为("C", 3),("A", 1)还是最不经常的。

                4.cache.get("A")。最经常使用的记录为("A", 1),("B", 2)变为最不经常的。

                5.cache.set("D", 4)。大小超过了3,所以移除此时最不经常使用的记录("B", 2),加入记录("D", 4),并且为最经常使用的记录,然后("C", 3)变为最不经常使用的记录。

代码:(暂无,map+队列)


题目二:

        给定一个N行3列二维数组,每一行表示有一座大楼,一共有N座大楼。所有大楼的底部都坐落在X轴上,每一行的三个值(a,b,c)代表每座大楼的从(a,0)点开始,到(b,0)点结束,高度为c。
        输入的数据可以保证a<b,且a,b,c均为正数。大楼之间可以有重合。请输出整体的轮廓线。
        例子:给定一个二维数组
        [
                [1, 3, 3],
                [2, 4, 4],
                [5, 6, 1]
        ]
        输出为轮廓线
        [
                [1, 2, 3],
                [2, 4, 4],
                [5, 6, 1]
        ]

代码:(暂无)



题目三:

找到被指的新类型字符

【题目】
        新类型字符的定义如下:
        1.新类型字符是长度为1或者2的字符串。
        2.表现形式可以仅是小写字母,例如,"e";也可以是大写字母+小写字母,例如,"Ab";还可以是大写字母+大写字母,例如,"DC"。现在给定一个字符串str,str一定是若干新类型字符正确组合的结果。比如"eaCCBi",由新类型字符"e"、"a"、"CC"和"Bi"拼成。再给定一个整数k,代表str中的位置。请返回被k位置指中的新类型字符。
【举例】
        str="aaABCDEcBCg"。
        1.k=7时,返回"Ec"。
        2.k=4时,返回"CD"。
        3.k=10时,返回"g"。

代码:



题目四:

字典树(前缀树)的实现
【题目】
        字典树又称为前缀树或Trie树,是处理字符串常见的数据结构。假设组成所有单词的字符仅是“a”~“z”,请实现字典树结构,并包含以下四个主要功能。
                void insert(String word):添加word,可重复添加。
                void delete(String word):删除word,如果word添加过多次,仅删除一个。
                boolean search(String word):查询word是否在字典树中。
                int prefixNumber(String pre):返回以字符串pre为前缀的单词数量。

代码:



题目五:

给定一个整数数组arr,请返回子数组的最大异或值
要求:时间复杂度O(N)

代码:



题目六&七:

数字的英文表达和中文表达
【题目】
        给定一个32位整数num,写两个函数分别返回num的英文与中文表达字符串。
【举例】
        num=319
        英文表达字符串为:Three Hundred Nineteen
        中文表达字符串为:三百一十九
        num=1014
        英文表达字符串为:One Thousand, Fourteen
        中文表达字符串为:一千零十四
        num=-2147483648
        英文表达字符串为:Negative, Two Billion, One Hundred Forty Seven Million, Four
        Hundred Eighty Three Thousand, Six Hundred Forty Eight
        中文表达字符串为:负二十一亿四千七百四十八万三千六百四十八
        num=0
        英文表达字符串为:Zero
        中文表达字符串为:零

代码:



题目八:

一个数组如何能够拆出异或值为0的最多的子数组。

代码:

原创粉丝点击