LeetCode——1798. 你能构造出连续值的最大数目

2023-11-04

一、题目

给你一个长度为 n 的整数数组 coins ,它代表你拥有的 n 个硬币。第 i 个硬币的值为 coins[i] 。如果你从这些硬币中选出一部分硬币,它们的和为 x ,那么称,你可以 构造 出 x 。

请返回从 0 开始(包括 0 ),你最多能 构造 出多少个连续整数。

你可能有多个相同值的硬币。
在这里插入图片描述
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/maximum-number-of-consecutive-values-you-can-make/description/

二、C解法

我的思路及代码

先使用快速排序算法对数组进行排序。然后用i作为计数器,判断当前的i是否可以被表示,直到不能被表示的时候退出。此代码在测试时由于超时未通过

  • 时间复杂度:排序O(nlogn),查找O(n^2)
  • 空间复杂度:排序需要O(logn)的栈空间
int Partition(int A[],int low,int high){
    int pivot=A[low];//将第一个元素设置为枢纽
    while (low<high){//循环跳出条件
        while (low<high&&A[high]>=pivot) --high;//从后往前找到比枢纽元素小的元素
        A[low] = A[high];//比枢纽小的元素移动到左边
        while (low<high&&A[low]<=pivot) ++low;//从前往后找到比枢纽元素大的元素
        A[high] = A[low];//比枢纽大的元素移动到右边
    }
    A[low]=pivot;//最后low和high重合的位置就是枢纽元素的位置
    return low;//返回枢纽的位置
}

/**
 * 快速排序
 * @param A 待排序数组
 */
void QuickSort(int A[],int low,int high){
    if(low<high){//递归跳出条件
        int pivotpos = Partition(A,low,high);//第一次划分
        QuickSort(A,low,pivotpos-1);//对两个子表进行划分
        QuickSort(A,pivotpos+1,high);
    }
}

int getMaximumConsecutive(int* coins, int coinsSize){
    QuickSort(coins,0,coinsSize-1);

    for(int i=1;;i++){//i就是要返回的数
        int temp = i;
        for(int j=coinsSize-1;j>=0;j--){
            if(temp==coins[j])  {
                if(coins[j]==1){
                    i+=j;
                }
                temp=0;break;
            }
            if(temp<coins[j]) continue;
            if(temp>coins[j]) temp -=coins[j];
        }
        if(temp == 0) continue;
        else return i;
    }
}

官方参考代码

通过的代码要么和参考代码一样,要么就大同小异,我的评价是依托答辩

  • 时间复杂度:时间复杂度:O(nlog⁡n),其中 n 为数组 coins 的长度。主要为排序所需要的时间开销。
  • 空间复杂度:O(logn)。排序需要 O(log⁡n)的栈空间。
static int cmp(const void *pa, const void *pb) {
    return *(int *)pa - *(int *)pb;
}

int getMaximumConsecutive(int* coins, int coinsSize) {
    int res = 1;
    qsort(coins, coinsSize, sizeof(int), cmp);
    for (int i = 0; i < coinsSize; i++) {
        if (coins[i] > res) {
            break;
        }
        res += coins[i];
    }
    return res;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode——1798. 你能构造出连续值的最大数目 的相关文章

随机推荐

  • 使用pandas对xlsx文件的基本操作

    起因 因最近实习期间 要求查看 xlsx文件中数据是否有误 由于数据较多 想用python去执行 结果发现网上对xlsx文件操作或是太旧 大多难以应用 所以自己整理了一下 以备自己后用 模拟一个测试数据集data test xlsx文件 文
  • Broken pipe异常分析和常用锁的命令

    错误描述 ClientAbortException java io IOException Broken pipe 这种就是获取不到连接了 连接已经断开了 出现这种问题的可能性 1 连接太多 到了最大连接数 每个连接处理的速度太慢 而导致处
  • COLMAP导出相机外参(bin文件转txt文件)

    官方给出的images txt如下图 Image list with two lines of data per image 每张图像数据占两行 IMAGE ID QW QX QY QZ TX TY TZ CAMERA ID NAME 图像
  • 基于mykernel完成多进程的简单内核

    学号 476 实验资源 https github com mengning linuxkernel 1 实验环境准备 使用个人电脑的parallels desktop ubuntu虚拟机 1 安装qemu sudo apt get inst
  • DCT变换 / DWT变换 ----课堂笔记

    之前也学过 但没有个具体总结 忘差不多了 DCT变换 一 DCT变换的全称是离散余弦变换 DCT 主要用于数据或者图像的压缩 由于DCT能够将空域的信号转换到频域上 因此具有良好的去相关性的性能 DCT变换本身是无损的且具有对称性 对原始图
  • 分支创建&查看&切换

    1 初始化git目录 创建文件并将其推送到本地库 git init echo 123 gt hello txt git add hello txt git commit m first commit hello txt git init I
  • hive分区与分桶

    为什么要分桶 获得更高的查询处理效率 在分区数量过于庞大以至于可能导致文件系统崩溃时 或数据集找不到合理的分区字段时 我们就需要使用分桶来解决问题了 分区中的数据可以被进一步拆分成桶 不同于分区对列直接进行拆分 桶往往使用列的哈希值对数据打
  • 什么是模式识别(简单易懂)

    1 大脑有一种偏好 叫模式化 这也是源于大脑具有的一个重要功能 模式识别 大脑不是把每个信息点全部处理后再进行识别 而是迅速抓住几个重要特征 然后与大脑中的已有模式对比 只要差不多 就套用 比如 我们可以在一张很多人的合影中迅速识别出某个特
  • 解决开启防火墙后,服务器不能ping通,网站不能访问的问题

    1 解决能ping通的设置 控制面板 Windows防火墙 高级设置 入站规则 然后右键启用这个选项就可以了 2 解决网站不能访问的设置 控制面板 Windows防火墙 高级设置 点击入站规则 新建规则 这样就将80端口加入到入站规则中 实
  • CPU与GPU上检测pytorch是否安装成功

    文章目录 python学习 0 安装pytorch 1 验证pytorch已经安装成功 1 1确定pytorch版本 1 2 测试pytorch基础功能 1 3 在GPU上测试pytorch 1 4使用实例代码测试 python学习 pyt
  • 历史与AES算法

    AES算法早期体现 应该追溯到明朝科举制时期 当然 这种算法不是用来答题的 而是用来作弊的 假如 张三是明朝某大户人家的公子哥 他除了以后要继承遗产外 还要考虑一个光宗耀祖的问题 但在古代 解决这个问题的唯一办法就是通过科举 可张三天生喜欢
  • VM ubuntu所在的移动硬盘意外接触不良,虚拟机异常退出后无法重启

    我的VM版本为VMware Workstation 17 Pro Ubuntu版本为22 04 一次因为虚拟机所在的移动硬盘接触不良 异常退出 重启主机后启动虚拟机 先是ubuntu ubuntu高级选项等选项让我选 然后在我选择了ubun
  • linux---sed命令

    sed命令目录 一 sed命令概念 二 sed命令的格式 1 在命令行定义编辑器命令 2 在命令行使用多个编辑器命令 3 从文件中读取编辑器命令 三 更多的替换选项 1 替换标记 有4种可用的替换标记 2 替换字符 四 使用地址 在sed编
  • 07FFMPEG的AVCodec结构体分析

    07FFMPEG的AVCodec结构体分析 概述 该结构体位于libavcodec库中的codec h中 注意 非公共区域的字段我可能不会翻译 因为翻译也不知道说什么 还是保留着原文更好 其它的结构体分析同理 1 AVCodec 结构体 t
  • 银联支付(亲测成功)

    银联支付 SDK使用 测试流程 此文为银联入门 比较简单 不涉及springboot springcloud 普通web就可以 作者是eclipse 下载demo开发包 https open unionpay com upload down
  • 朴素贝叶斯解决天气问题

    朴素贝叶斯是一种基于贝叶斯定理的分类方法 该算法是有监督的学习算法 解决分类问题 在该算法中 我们假设给定目标值时 属性之间相互条件独立 即 贝叶斯定理 对于分类问题 样本x属于类别y的概率 其中 P y 是指未使用数据训练分类器之前的y的
  • 机器学习方法篇(9)------梯度提升决策树GBDT

    每周一言 生命在于运动 无论脑力还是体力 导语 前面第3 4两节介绍了决策树 由于决策树简单有效 可解释性强 因此被包装成了一些更为高效的机器学习算法 其中最为知名的就是梯度提升决策树GBDT Gradient Boosting Decis
  • 使用RoboForm自动填写表单

    日常工作中 我们也许经常要填写一些内容一模一样的表格 很是讨厌 这里使用RoboForm可以自动填充表格 大大提高我们的工作效率 一 自动填登录页面密码 比如我想登录 右击空白处 选择 RoboForm工具栏 就可以在网页下端显示该工具栏
  • 实训十四:FTP服务器搭建

    实训十四 FTP服务器 2017 年 6 月 6 日编写 今日公布出来 一 搭建FTP服务器 检查网络是否正常 查看 和 连通性 查看主机名称 查看是否已经自动挂载光盘 清楚到光盘挂载的目录 进入挂载安装包中 查看ftp的RPM包 并是安装
  • LeetCode——1798. 你能构造出连续值的最大数目

    一 题目 给你一个长度为 n 的整数数组 coins 它代表你拥有的 n 个硬币 第 i 个硬币的值为 coins i 如果你从这些硬币中选出一部分硬币 它们的和为 x 那么称 你可以 构造 出 x 请返回从 0 开始 包括 0 你最多能