经典面试问题

本文列举了一系列经典的面试问题,涉及排序、链表操作、递归与循环、二叉树、字符串处理等。如:O(n)时间复杂度内对员工年龄排序、旋转数组的最小元素查找、递归与循环解法的比较、链表节点删除、倒数第k个节点寻找、链表反转、数组奇偶数排序、二叉树镜像、顺时针打印矩阵、特定和的二叉树路径、二叉搜索树转双向链表、字符串排列、多数元素查找、连续子数组最大和及首个只出现一次的字符查找。这些问题展示了算法在解决实际问题中的应用。
摘要由CSDN通过智能技术生成

1.对上万个员工的年龄进行排序,时间复杂度不超过O(n),空间复杂度为常数级别(特点:带排序的值有一个范围)

void sortAge(int age[],int length){
    const int oldestage = 99;
    int timeAge [oldestage + 1]={
  0};  //第i个位置存i岁的人的个数
    for(int i = 0;i<length ; ++i){
        if( age[i]<0  || age[i] >99)
        ++ timeage [ age[i]] ;
    }

    int index = 0;
    for(int i = 0 ;i<oldestage ; ++i){
        for(int j = 0 ;j<timeage[i];++j)
        {   age[index] = i; //连续timeage[i]个人都是i岁
            ++index;
        }   
    }

}

2.旋转数组
输入一个递增数组的旋转数组,输出旋转数组的最小元素。
旋转之后的数组实际上可以划分为两个排序的子数组(采用二分查找的思想),用两个指针分别指向第一个元素和最后一个元素,找到中间的元素,判断中间位置前后元素的之判断该位置实在前段数组还是后段数组,
还是两段

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值