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

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

思路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;

}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

适用于虚拟环境的免费企业备份软件

多年来&#xff0c;许多行业严重依赖物理服务器提供计算资源——你可以想象到巨大的服务器机房和笨重的服务器的场景。 然而&#xff0c;随着业务快速增长&#xff0c;许多组织发现物理服务器已经无法有效利用计算资源。因此&#xff0c;为了节省成本&#xff0c;引入了虚拟服…

SQL-每日一题【627. 变更性别】

题目 Salary 表&#xff1a; 请你编写一个 SQL 查询来交换所有的 f 和 m &#xff08;即&#xff0c;将所有 f 变为 m &#xff0c;反之亦然&#xff09;&#xff0c;仅使用 单个 update 语句 &#xff0c;且不产生中间临时表。 注意&#xff0c;你必须仅使用一条 update 语句…

c++数据锁链

题目描述&#xff1a; 创建一个结构体为Node&#xff0c;具有value , next 两个属性&#xff1b; value为整型&#xff0c;用来储存结构体数值&#xff1b; next为Node类型指针&#xff0c;用来指向下一组数据地址&#xff1b; 第1组数据value 5&#xff1b; 第2组数据value …

S475支持 ModbusRTU 转 MQTT协议采集网关

6路模拟量输入和2路RS485串口是一种功能强大的通信接口&#xff0c;可以接入多种设备和系统&#xff0c;支持4-20mA输出的传感器以及开关量输入输出。本文将详细介绍6路模拟量输入和2路RS485串口的应用场景和功能&#xff0c;重点介绍其在SCADA、HMI、远程数据监控以及采集控制…

中间件安全-CVE漏洞复现-Docker+Websphere+Jetty

中间件-Docker Docker容器是使用沙盒机制&#xff0c;是单独的系统&#xff0c;理论上是很安全的&#xff0c;通过利用某种手段&#xff0c;再结合执行POC或EXP&#xff0c;就可以返回一个宿主机的高权限Shell&#xff0c;并拿到宿主机的root权限&#xff0c;可以直接操作宿主机…

大数据课程D4——hadoop的MapReduce

文章作者邮箱&#xff1a;yugongshiyesina.cn 地址&#xff1a;广东惠州 ▲ 本章节目的 ⚪ 了解MapReduce的作用和特点&#xff1b; ⚪ 掌握MapReduce的组件&#xff1b; ⚪ 掌握MapReduce的Shuffle&#xff1b; ⚪ 掌握MapReduce的小文件问题&#xff1b; ⚪…

在CentOS 7上挂载硬盘到系统的步骤及操作

目录 1&#xff1a;查询未挂载硬盘2&#xff1a;创建挂载目录3&#xff1a;检查磁盘是否被分区4&#xff1a;格式化硬盘5&#xff1a;挂载目录6&#xff1a;检查挂载状态7&#xff1a;设置开机自动挂载总结&#xff1a; 本文介绍了在CentOS 7上挂载硬盘到系统的详细步骤。通过确…

【机器学习】基础知识点的汇总与总结!更新中

文章目录 一、监督学习1.1、单模型1.1.1、线性回归1.1.2、逻辑回归&#xff08;Logistic Regression&#xff09;1.1.3、K近邻算法&#xff08;KNN&#xff09;1.1.4、决策树1.1.5、支持向量机&#xff08;SVM&#xff09;1.1.6、朴素贝叶斯 1.2、集成学习1.2.1、Boosting1&…

QTDAY4

思维导图 tcp服务器 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务器类 #include <QTcpSocket> //客户端类 #include <QMessageBox> //对话框类 #include <QList> //链表容器…

区分jdbcTemplate操作数据库和mybatis操作数据库

JdbcTemplate和MyBatis是Java中常用的两种数据库操作方式。它们在实现上有一些区别&#xff0c;下面我将为你介绍它们的主要特点和区别&#xff1a; JdbcTemplate&#xff1a; JdbcTemplate是Spring框架中提供的一个类&#xff0c;用于简化JDBC操作。使用JdbcTemplate时&#x…

【弹力设计篇】聊聊隔离设计

为什么需要隔离设计 隔离其实就是Bulkheads&#xff0c;隔板。在生活中隔板的应用主要在船舱中进行设计&#xff0c;目的是为了避免因一处漏水导致整个船都沉下去。可以将故障减少在一定的范围内&#xff0c;而不是整个船体。 从架构演变来说的话&#xff0c;大多数系统都是从…

用哪些指标可以抓住现货白银趋势?

在现货白银走势分类中&#xff0c;走势一般来说之分成三类&#xff0c;一个是上升&#xff0c;一个是下跌&#xff0c;还有一个是水平。对于投资者来说&#xff0c;趋势&#xff0c;也就是上升或者下跌是我们喜爱的&#xff0c;那么我们如何捕捉这种趋势呢&#xff1f;我们可以…

Linux CentOS 8 编译安装Apache Subversion

前言 距离上一篇发表已经过去了5年零2个多月&#xff0c;这次重新开始写技术博客&#xff0c;理由和原来一样&#xff0c;也就是想把自己学习和工作中遇到的问题和知识记录下来&#xff0c;今天记录一下Linux CentOS 8通过编译安装svn的过程。 下载SVN 下载地址&#xff1a;…

论文笔记:Fine-Grained Urban Flow Prediction

2021 WWW 1 intro 细粒度城市流量预测 两个挑战 细粒度数据中观察到的网格间的转移动态使得预测变得更加复杂 需要在全局范围内捕获网格单元之间的空间依赖性单独学习外部因素&#xff08;例如天气、POI、路段信息等&#xff09;对大量网格单元的影响非常具有挑战性——>论…

想做上位机,学C#还是QT?

学习C#还是Qt&#xff0c;取决于你的具体需求和偏好。 如果你计划开发跨平台的桌面应用程序&#xff0c;并且希望使用一种更轻量级、直观的界面框架&#xff0c;那么Qt可能是一个不错的选择。Qt是一个功能丰富且成熟的跨平台框架&#xff0c;支持多种开发语言&#xff08;包括…

【Golang】Golang进阶系列教程--为什么 Go 语言 struct 要使用 tags

文章目录 前言struct tags 的使用使用反引号避免使用空格避免重复使用标准化的 tag 名称多个 tag 值 struct tags 的原理struct tags 的优势常用的 struct tags参考文章&#xff1a; 前言 在 Go 语言中&#xff0c;struct 是一种常见的数据类型&#xff0c;它可以用来表示复杂…

安装Python之后 安装库报错 There was an error checking the latest version of pip.

报错代码 & 图片如下 Looking in indexes: https://pypi.tuna.tsicmdnghua.edu.cn/simple WARNING: Retrying (Retry(total4, connectNone, readNone, redirectNone, statusNone)) after connection broken by NewConnectionError(<pip._vendor.urllib3.connection.HT…

重要通知|关于JumpServer开源堡垒机V2版本产品生命周期的相关说明

JumpServer&#xff08;https://github.com/jumpserver&#xff09;开源项目创立于2014年6月&#xff0c;已经走过了九年的发展历程。经过长期的产品迭代&#xff0c;JumpServer已经成为广受欢迎的开源堡垒机。 JumpServer堡垒机遵循GPL v3开源许可协议&#xff0c;是符合4A&a…

Docker容器监控之 CAdvisor+InfluxDB+Granfana

通过docker stats命令可以很方便的看到当前宿主机上所有容器的CPU,内存以及网络流量等数据&#xff0c;一般小公司够用了。但是&#xff0c;docker stats统计结果只能是当前宿主机的全部容器&#xff0c;数据资料是实时的&#xff0c;没有地方存储、没有健康指标过线预警等功能…

自定义信号槽机制

自定义信号槽机制 自定义信号自定义槽自定义信号和槽函数的使用解决办法 如果想要在QT类中自定义信号槽, 需要满足一些条件, 并且有些事项也需要注意: 要编写新的类并且让其继承Qt的某些标准类这个新的子类必须从QObject类或者是QObject子类进行派生在定义类的头文件中加入 Q_…