2022暑期复习-Day1

选择题

Q1堆是一种有用的数据结构。下列那个关键码序列是一个堆()。

A. 94,31,53,23,16,72
B. 94,53,31,72,16,23
C. 16,53,23,94,31,72
D. 16,31,23,94,53,72

堆要满足其中的任何一个父亲和孩子都要满足大根堆或者小根堆,且只能满足一种情况,不能存在堆中即又小堆又有大堆存在

选项A

在这里插入图片描述
选项B
在这里插入图片描述
选项C
在这里插入图片描述
选项D

在这里插入图片描述

答案:D

Q2 将关键字序列 50,40,95,20,15,70,60,45,80 调整成一个小根堆,堆结构是15,20,60,45,40,70,95,50,80 ,该说法正确吗?()

A.正确
B.不正确

将数组构建成堆的算法是,
从第一个非叶子节点{ (n-2)/2 }开始,依次循环到根节点,并且每次都进行向下调整算法
时间复杂度为O(N*logN)

答案:A

Q3 已知序列 25, 13, 10, 12, 9 是大根堆,在序列尾部插入新元素 18 ,将其再调整为大根堆,调整过程中元素之间进行的比较次数是( )

A.1
B.2
C.4
D.5

利用向上调整算法,从尾部新元素开始,依次与父节点比较,直到比完根节点。

答案:A

Q4 已知关键字序列 5,8,12,19,28,20,15,22 是小根堆(最小堆),插入关键字 3 ,调整后得到的小根堆是()

A. 3,5,12,8,28,20,15,22,19
B. 3,5,12,19,20,15,22,8,28
C. 3,8,12,5,20,15,22,28,19
D. 3,12,5,8,28,20,15,22,19

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

答案:A

Q5 在堆排序的过程中,建立一个堆的时间复杂度是()

A. O(n)
B. O(logn)
C. O(nlogn)
D. O(n2)

从下往上进行向下调整算法,每一个元素比较H-当前层数
H(t) = 1*(h-1)+2*(h-2)+4*(h-3)…
在这里插入图片描述

答案:A

编程题

Q6

在这里插入图片描述

class Solution {
public:
    bool isAnagram(string s, string t) {
        size_t len = s.size();
        if(s.size()!=t.size())
            return false;
        int arr[26]={0};
        for(int i = 0;i < len; i++)
        {
            arr[s[i]-'a'] +=1;
            arr[t[i]-'a'] -=1;
        }
        int count=0;
        for(int i =0;i<26;i++)
        {
            if(arr[i]==0)
                count++;
        }
        return count==26;
    }
};

Q7

在这里插入图片描述

char arr[] = {'a','e','i','o','u'};
class Solution {
public:
    
    bool findtrue(char c)
    {
        for(int i=0;i<5;i++)
        {
            if(c==arr[i]||c==arr[i]-32)
                return true;
        }
        return false;
    }
    bool halvesAreAlike(string s) {
        
        int count = 0;
        int len = s.size();
        for(int i = 0; i<len ;i++)
        {
            if(findtrue(s[i]))
            {
                if(i<len/2)
                    count++;
                else
                    count--;
            }
        }
        return count==0;
    }
};
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值