C语言每日一题:4.消失的数字+数字在升序数组中出现的次数+整数转换

news2024/12/25 12:29:30

请添加图片描述
消失的数字:

思路1:排序+遍历
1.使用qsort排序数组判断当前数值+1是否是数组下一个元素的数值。
2.如果是一直循环注意数组越界,如果不是那么当前的数组的数值+1就是消失的数。
3.存在0——n的数字是第n个数没有了。循环过程中从头到尾也找不到这个数字。
4.因为在循环过程中数组下标只会从0到n-1.前面排序之后都满足循环要求。
5.在循环判断之前判断一下num[n-1]+1是否等于n;如果等于说明是最大的数值消失直接返回。
6.如果不是进入循环找这个数值。

int cmp(void* a, void* b)
{
    return (*((int*)a) - *((int*)b));
}

int missingNumber(int* nums, int numsSize)
{
	//排序+遍历的方法
    qsort(nums, numsSize, sizeof(nums[0]), cmp);
    int i = 0;
    int ret = 0;
    int flag = -1;
    if ((nums[numsSize - 1] + 1) == numsSize)
    {
        flag = 0;
    }
    //都不是最大数值失去的情况。
    else
    {
       //注意数组越界
       while (i < numsSize - 1)
        {
            if ((nums[i] + 1 == nums[i + 1]) && (nums[0] == 0))
            {
                i++;
            }
            //第一位不是0说明0消失了
            else if (nums[0] != 0)
            {
                ret = 0;
                break;
            }
            else
            {
                ret = nums[i] + 1;
                break;
            }
        }
    }
     if (flag == 0)
    {
        return numsSize;
    }
    return ret;

思路二:使用计算的方法
1.定义sum1和sum2分别作为0到n所有数值的和,和0到n除了消失数字的和。
2.计算sum1直接使用等差数列求和,((0+numsize)*(numsize+1))/2
3.计算sum2直接遍历求和。(防止数组越界)。加numsize次。


int missingNumber(int* nums, int numsSize)
{
    //计算数值差的方法
    int sum1=0;
    int sum2=0;
    sum2=((0+numsSize)*(numsSize+1))/2;
    for(int i=0;i<numsSize;i++)
    {
        sum1+=nums[i];
    }
    return sum2-sum1;
}

思路三:按位与的思路
1.定义一个x,先与数组中的每一个内容按位与。
2.然后x再与,0到n的所有数值进行按位与。
3.按位与满足交换律(相同的数消除)
比如:0,1,2,3,4,5
: 0,1,2,3,4,5,6
按位与之后结果是6.

int missingNumber(int* nums, int numsSize)
{

    int x=0;
    
     for(int i=0;i<numsSize;i++)
    {
        x^=nums[i];
    }
    for(int i=0;i<=numsSize;i++)
    {
        x^=i;
    }
    return x;

请添加图片描述

数字在升序数组中出现的次数

数字在升序数组中出现的次数
思路1:
1.这个K只出现一次,或者出现多次。
2.这个K没有出现过。
3.二分查找的思路。
4.当查找结束,判断arr[mid]==k吗?,不等于说明这个k不存在于这个数组里面我们直接返回0;
5.找到了这个K数的位置我们mid下标向右移动直到下一个不是停止到k的位置停止,左边同理。
6.同时记录K的数值。

int GetNumberOfK(int* nums, int numsLen, int k)
{
    // write code here
    if (numsLen == 0)
    {
        return 0;
    }
    //出现一次(mid这个位置确实是出现了一次)and没有出现
    int left = 0;
    int right = numsLen - 1;
    int mid = 0;
    while (left <= right)
    {
        mid = (left + right) / 2;
        if (nums[mid] < k)
        {
            left = mid + 1;
        }
        else if (nums[mid] > k)
        {
            right = mid - 1;
        }
        else
        {
            break;
        }
    }

    //这个数值不存在
    if (nums[mid] != k)
    {
        return 0;
    }


    //只有一个数,这一个就是要的
    int count = 1;
    if (nums[mid] == k && numsLen == 1)
    {
        return 1;
    }
    
    else if(nums[mid] == k && numsLen != 1)
    {
        int left=mid;
        int right=mid;
            while (nums[right + 1] == k)
            {
                right++;
                count++;
            }
            
            while (nums[left - 1] == k)
            {
                left--;
                count++;
            }     
    }
 return count;
}

请添加图片描述

整数转换

思路1:
1.注意A,B的范围。在二进制位上31个是数值位,一位是符号位。
2.我们可以通过按位异或的方式拿出不同位数的情况。
3.变成了记录按位异或结果中1的数值个数。
4.b=1<<i 判断异或结果&b是否==b相等就说明对应异或结果处的值为1.
5.A,B 。有三种情况:
1.A,B中有一个为负数,所以需要加上符号位的1.
2.A,B同正或者同负,直接返回统计的结果。

int convertInteger(int A, int B){
    //两个数值进行按位异或
    int C=A^B;
    //进行记录
    int count=0;
    int b=0;
    if(((A<0)||(B<0)))
    {
        count+=1;
    }
    for(int i=0;i<31;i++)
    {
        b=(1<<i);
        if((b&C)==b)
        {
            count++;
        }
    }
    if((A<0)&&(B<0))
    count--;

    return count;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/788027.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ 哈希的应用【位图】

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; C修行之路 &#x1f383;操作环境&#xff1a; Visual Studio 2022 版本 17.6.5 文章目录 &#x1f307;前言&#x1f3d9;️正文1、问题一2、位图概念3、位图的模拟实现3.1、基本思路3.2、set3.3、reset3.4、…

从电商指标洞察到运营归因,只需几句话?AI 数智助理准备好了!

Lily 是名入职不久的电商运营助理&#xff0c;最近她想要根据 2022 年的客单价情况&#xff0c;分析品牌 A 在不同电商渠道的用户行为和表现&#xff0c;并提供一些有价值的洞察和建议给客户。然而在向技术人员提报表需求后&#xff0c;技术人员以需求排满为借口拒绝了。 Lily …

STM32CUBEMX配置 定时器中断 和 上升沿中断(实现检测1s以内的脉冲个数)

———————————————————————————————————— ⏩ 大家好哇&#xff01;我是小光&#xff0c;嵌入式爱好者&#xff0c;一个想要成为系统架构师的大三学生。 ⏩最近在开发一个STM32H723ZGT6的板子&#xff0c;使用STM32CUBEMX做了很多驱动&#x…

速锐得开发社区-新一代汽车网络通信技术CAN FD的特点归纳

随着汽车工业的快速发展&#xff0c;汽车逐渐走向智能化&#xff0c;功能也越来越丰富&#xff0c;例如特斯拉、比亚迪、理想汽车为代表&#xff0c;在车载导航、驻车雷达、胎压监测、倒车影像、无钥匙启动、定速巡航、自动泊车、高级辅助驾驶系统、自动驾驶、域控制器、智能网…

慎投!中科院2区TOP期刊被标记为“On Hold”!

近日&#xff0c;小编从科睿唯安旗下的“Master Journal List”官网查到&#xff0c;知名老牌期刊Chemosphere竟然被标记为“On Hold”状态&#xff01;究竟是怎么回事呢&#xff1f; 中科院TOP期刊标记为“On Hold” 出版社&#xff1a;Elsevier ISSN&#xff1a;0045-6535 …

【广州华锐互动】无人值守变电站AR虚拟测控平台

无人值守变电站AR虚拟测控平台是一种基于增强现实技术的电力设备巡检系统&#xff0c;它可以利用增强现实技术将虚拟信息叠加在真实场景中&#xff0c;帮助巡检人员更加高效地完成巡检任务。这种系统的出现&#xff0c;不仅提高了巡检效率和准确性&#xff0c;还降低了巡检成本…

vray GPU渲染如何设置?最适合 VRay 渲染的 GPU 是什么?

Chaos 提供的 Vray GPU是一个独立的渲染引擎&#xff0c;提供 GPU 硬件加速。它还与 CPU&#xff08;处理器&#xff09;配合使用&#xff0c;并利用 CPU 和 GPU 硬件进行无缝混合渲染。 GPU 渲染使 Vray GPU 渲染引擎能够在系统的 GPU 而不是 CPU 上执行光线跟踪计算。由于 G…

Linux学习之case

case的格式如下&#xff1a; case "变量" in值1)指令集1;;值2)指令集2;;*)指令集n;; esaccase会将变量的值跟值1、值2等进行比较&#xff0c;符合就执行后边对应的指令集&#xff0c;注意)只是一个标识&#xff0c;表明这是一个分支&#xff0c;;;是一个分支结束&am…

Qt控件样式设置、QSS语法介绍

一、前言 QT是比较流行的跨平台应用程序框架,提供了丰富的控件库和功能强大的工具,用于创建各种类型的应用程序。虽然QT默认提供的样式看起来很不错,但是如果想要自定义的应用程序的外观,可以使用QT样式表(QSS)来设置控件的外观和行为。 QSS是一种基于CSS的样式表语言,…

DB-GPT:强强联合Langchain-Vicuna的应用实战开源项目,彻底改变与数据库的交互方式

今天看到 蚂蚁科技 Magic 开源的DB-GPT项目&#xff0c;觉得创意很好&#xff0c;集成了当前LLM的主流技术&#xff0c;主要如下 Langchain&#xff1a; 构建在LLM之上的应用开发框架HuggingFace: 模型标准&#xff0c;提供大模型管理功能Vicuna: 一个令GPT-4惊艳的开源聊天机…

odoo服务相关shell脚本

odoo服务相关shell脚本 1 确定系统不会自动休眠 ubuntu 22.04登陆之后&#xff0c;如果系统较长时间不操作&#xff0c;系统就自动休眠了。 如果重启之后&#xff0c;从来都没有登陆&#xff0c;就不会出现系统自动休眠的情况。 观察系统日志&#xff0c;发现类似如下的内容…

学好Elasticsearch系列-Mapping

本文已收录至Github&#xff0c;推荐阅读 &#x1f449; Java随想录 文章目录 Mapping 的基本概念查看索引 Mapping 字段数据类型数字类型基本数据类型Keywords 类型Dates&#xff08;时间类型&#xff09;对象类型空间数据类型文档排名类型文本搜索类型 两种映射类型自动映射&…

视屏消音工具,支持指定词语,或者短句消音

这里写自定义目录标题 一个使用python开发的视频消音工具 一个使用python开发的视频消音工具 1.支持上传文件字幕,进行视屏整段语句进行静音处理 2.支持通过指定的词语或者句子进行精确的消音处理 3.支持输入多个词语,或者断句进行消音处理 页面比较简陋,但功能应该满足日常使…

Vue移动端项目--瑞幸咖啡重构优化

来了客官&#xff0c;好久不见&#xff01; 从年初开始&#xff0c;就有个想法&#xff0c;想着把之前做过的项目重新整理一下。毕竟今时不同往日&#xff0c;从现在的角度去看曾经做过的项目&#xff0c;倒是觉得有很多稚嫩的地方。毕竟无论做什么都是熟能生巧&#xff0c;由浅…

【干货分享】自动化测试理论知识以及相关框架

自动化测试 1.进行自动化测试的原因&#xff1a; a.黑盒测试回归测试效率低 b.手动测试的偶然性和不确定性 c.回归的覆盖率不足 d.交付的产品质量无法保证&#xff0c;全靠评估 e.系统越复杂&#xff0c;问题越多 f.上线时间长&#xff0c;构件失败率高导致的蝴蝶效应&#xf…

分享200+个关于AI的网站

分享200个关于AI的网站 欢迎大家访问&#xff1a;https://tools.haiyong.site/ai 快速导航 AI 应用AI 写作AI 编程AI 设计AI 作图AI 训练模型AI 影音编辑AI 效率助手 AI 应用 文心一言: https://yiyan.baidu.com/ 百度出品的人工智能语言模型 ChatGPT: https://chat.openai.c…

春秋云境:CVE-2022-23880(taoCMS v3.0.2 任意文件上传漏洞)

目录 一、题目 二、进入题目&#xff1a; 2.1 文件写入一句话木马&#xff1a; 2.2 用SQL语句写入木马&#xff1a; 一、题目 靶标介绍&#xff1a; taoCMS v3.0.2 文件管理处存在任意文件上传漏洞&#xff0c;攻击者可执行任意代码 二、进入题目&#xff1a; 访问/admin …

CRM系统的作用有哪些?

CRM系统的作用具体有哪些&#xff1f;之前写过很多关于CRM选型类的内容&#xff0c;其实在介绍各大CRM软件时&#xff0c;都会大概介绍下其CRM系统的作用&#xff0c;这篇就借这个问题详细梳理下&#xff0c;CRM系统具体有哪些作用。 一个好用的CRM客户管理系统的作用包括哪些…

鸿合一体机怎么系统还原

系统还原方法&#xff1a;先用牙签按住电脑还原按钮不松&#xff0c;然后按一下电源按钮开机&#xff0c;直到电脑进入系统还原画面&#xff0c;就可以松开还原按钮了&#xff0c;系统还原完成后会自动重启&#xff0c;重启完成就可以用了。

消息队列(一)-- RabbitMQ入门(4)

RabbitMQ 其他知识点 幂等性 消息重复消费 消费者在消费MQ 中的消息时&#xff0c;MQ 已经把消息发送给消费者&#xff0c;消费者在给 MQ 返回 ack 时网络中断&#xff0c;故MQ 未收到确认消息&#xff0c;该消息会重新发给其他消费者&#xff0c;或网络重新连接后再次发给该消…