首页 > 其他分享 >剑指 Offer 40. 最小的k个数

剑指 Offer 40. 最小的k个数

时间:2023-04-08 23:55:36浏览次数:51  
标签:arr Offer int 个数 cnt 40 ++ vector ans

题目链接:剑指 Offer 40. 最小的k个数

方法:排序

解题思路

  1. 基于比较的排序,最低时间复杂度为\(O(nlogn)\),空间复杂度为\(O(1)\);
  2. 哈希计数,时间复杂度为\(O(n)\),但需要额外的空间。

代码

// 基于比较的排序
class Solution {
public:
    vector<int> getLeastNumbers(vector<int>& arr, int k) {
        vector<int> ans(k);
        sort(arr.begin(), arr.end());
        for (int i = 0; i < k; i ++ ) {
            ans[i] = arr[i];
        }
        return ans;
    }
};

// hash计数
class Solution {
public:
    vector<int> getLeastNumbers(vector<int>& arr, int k) {
        int cnt[10001] = {0};
        vector<int> ans(k);
        for (int i = 0; i < arr.size(); i ++ ) {
            cnt[arr[i]] ++ ;
        }
        for (int i = 0, j = 0; i < 10001 && j < k; i ++ ) {
            while (cnt[i] > 0 && j < k) {
                ans[j ++] = i;
                cnt[i] -- ;
            }
        }
        return ans;
    }
};

标签:arr,Offer,int,个数,cnt,40,++,vector,ans
From: https://www.cnblogs.com/lxycoding/p/17299615.html

相关文章

  • 20230401数位DP
    数位DP数位DP通常指在\([l,r]\)区间中有多少个满足条件\(k\)的个树常见的数据范围都很大也就是说,把数字的枚举,变成数字的构造不要把数字看作是\(10^{18}\)而把数字看作是\(18\)位数的填数过程就是把原本枚举的问题转化为了构造的问题然而数位dp常通过记忆化搜索实现tips:......
  • 剑指 Offer 36. 二叉搜索树与双向链表
    题目链接:剑指Offer36.二叉搜索树与双向链表方法一:回溯解题思路代码classSolution{private:intmx=INT_MIN,mi=INT_MAX;Node*start=NULL,*end=NULL;public:voidLrotate(Node*root,Node*last_root){//针对左子树,左旋if(!ro......
  • 剑指 Offer 37. 序列化二叉树
    题目链接:剑指Offer37.序列化二叉树取巧做法classCodec{private:TreeNode*root;public://Encodesatreetoasinglestring.stringserialize(TreeNode*root){this->root=root;return"";}//Decodesyourencoded......
  • 剑指 Offer 33. 二叉搜索树的后序遍历序列
    题目链接:剑指Offer33.二叉搜索树的后序遍历序列方法:分治解题思路首先假设该序列能够构成某个二叉搜索树的后序遍历序列,那么这个序列会被分成3个部分:左子树序列,右子树序列,父节点,其中左右子树节点数可能为0;现在就可以检查该序列是否符合这个规律,然后递归的判断子树是否符合......
  • 剑指 Offer 20. 表示数值的字符串
    题目链接:剑指Offer20.表示数值的字符串方法:模拟解题思路根据题意模拟,详情见代码注释。代码classSolution{public:boolisDecimal(strings){intfirst_symbol=s.find_first_of('.');//第一个'.'的位置intlast_symbol=s.find_last_of('.'......
  • STM32F401串口2的异步发送
    本文使用Nucleo-F401RE这块板,目的是学习STM32平台上串口的使用方法。只描述如何操作寄存器以发送给定数据且不使用中断。接收数据的方法自行类比。准备工作:一、打开芯片的Datasheet。找到引脚功能映射表,选择要使用的串口对应的功能引脚。这里使用PA2和PA3的07号功能,即USART2-TX......
  • 剑指 Offer 19. 正则表达式匹配
    题目链接:剑指Offer19.正则表达式匹配方法:动态规划解题思路详情见:逐行详细讲解,由浅入深,dp和递归两种思路代码classSolution{public:boolisMatch(strings,stringp){intn=s.size(),m=p.size();boolf[n+1][m+1];//f[i][j]代表s......
  • 计算机408考研攻略及总结
    复习资料王道单科书数据结构严蔚敏计算机组成原理白中英计算机组成原理唐朔飞计算机网络谢希仁操作系统汤子瀛真题王道真题讲解模拟题王道模拟题五轮复习法第一轮学习王道四门单科书第一轮只需要做选择题一两天搞不懂的内容直接跳过例子:组成原理的二......
  • STM32F407代码记录
    魔术棒c/c++中Includepaths中添加所有头文件路径;define中添加USE_STDPERIPH_DRIVER,STM32F40_41xxx,.c文件创建函数后,若不在.h中声明函数会造成报警:warning:fuction"xxxx"declaredimplicitly避免重复声明:#ifndef_XXX_XXX_H#ifndef_XXX_XXX_H#define_XXX_XXX_H#endif/*_X......
  • 1140. 石子游戏 II
    题目链接:1140.石子游戏II方法一:dfs(超时)解题思路题目要求\(Alice\)取得的石子数尽可能的多,那么就要使得\(Bob\)取得的石子尽可能的少,但是\(Bob\)也想要取得更多的石子,因此\(Alice\)在每次选取时,要使得在此种选取方法下,\(Bob\)能取的石子数最小。现定义\(dfs(idx,m)\)表示从......