C语言每日一练--------Day(11)

news2024/12/28 19:43:04

本专栏为c语言练习专栏,适合刚刚学完c语言的初学者。本专栏每天会不定时更新,通过每天练习,进一步对c语言的重难点知识进行更深入的学习。

今日练习题关键字:找到数组中消失的数字 哈希表

在这里插入图片描述

💓博主csdn个人主页:小小unicorn
⏩专栏分类:C语言天天练
🚚代码仓库:小小unicorn的代码仓库🚚
🌹🌹🌹关注我带你学习编程知识

Day1

  • 题目一:
    • 题目描述:
    • 解题思路:
    • 代码实现:
    • 结果情况:
  • 题目二:
    • 题目描述:
    • 解题思路:
    • 代码实现:
    • 结果情况:
  • 总结:

题目一:

题目描述:

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
数据范围:两个数都满足
−10≤n≤1000
进阶:空间复杂度 O(1),时间复杂度 O(1)

在这里插入图片描述

解题思路:

巧用位运算: 1、num1 & num2,与运算,得到的是2个数都是1的位置,如果进行加法,则需要进位,m =(num1 & num2)<< 1,得到进位后的数。

2、num1 ^ num2,异或,得到的是2个数1个为0另一个为1的位置,如果进行加法,则不需要进位。n = num1 ^ num2,此时如果m + n得到的就是两数之和,但不能做加法,此时我们想到了或运算。但如果将m、n直接进行或运算,无法保证不进位,于是我们重复以上的过程。

3、while(n & m),当n与上m得0 的时候,即再也不需要进位了,此时将m | n返回即可。

代码实现:

int Add(int num1, int num2 ) 
{
    int m = 0;
    int n = 0;
    m = (num1 & num2) << 1;  // 需要进位
    n = num1 ^
        num2;        //无需进位    此时m + n就是答案,但不能做加法
    while (n & m) 
    { // 检查是否还需要进位
        num1 = m;
        num2 = n;
        m = (num1 & num2) << 1;  //需要进位
        n = num1 ^ num2;        //无需进位
    }

    return m | n;
}

结果情况:

在这里插入图片描述
符合题目情况,问题解决。

题目二:

题目描述:

给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。

在这里插入图片描述

解题思路:

我们可以用一个哈希表记录数组 nums 中的数字,由于数字范围均在 [1,n] 中,记录数字后我们再利用哈希表检查 [1,n]中的每一个数是否出现,从而找到缺失的数字。

由于数字范围均在 [1,n] 中,我们也可以用一个长度为 nnn 的数组来代替哈希表。这一做法的空间复杂度是 O(n) 的。我们的目标是优化空间复杂度到 O(1)。

注意到 nums 的长度恰好也为 n,能否让 nums 充当哈希表呢?

由于 nums 的数字范围均在 [1,n]中,我们可以利用这一范围之外的数字,来表达「是否存在」的含义。

具体来说,遍历 nums,每遇到一个数 x,就让 nums[x−1] 增加 n。由于 nums 中所有数均在 [1,n] 中,增加以后,这些数必然大于 n。最后我们遍历 nums,若 nums[i] 未大于 n,就说明没有遇到过数 i+1。这样我们就找到了缺失的数字。

注意,当我们遍历到某个位置时,其中的数可能已经被增加过,因此需要对 n 取模来还原出它本来的值。

代码实现:

int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize) 
{
    for (int i = 0; i < numsSize; i++) 
    {
        int x = (nums[i] - 1) % numsSize;
        nums[x] += numsSize;
    }
    int* ret = malloc(sizeof(int) * numsSize);
    *returnSize = 0;
    for (int i = 0; i < numsSize; i++) 
    {
        if (nums[i] <= numsSize) 
        {
            ret[(*returnSize)++] = i + 1;
        }
    }
    return ret;
}

结果情况:

在这里插入图片描述
符合题目要求,问题解决。

总结:

文章到这里就要告一段落了,有更好的想法或问题,欢迎评论区留言。
希望今天的练习能对您有所收获,咱们下期见!

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

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

相关文章

【java】【项目实战】[外卖七]短信验证码、手机短信登录开发

目录 一、发送短信 1 短信服务介绍 2 阿里云短信服务&#xff08;个人现在不太好申请了&#xff09; 2.1 介绍 2.2 注册账号 2.3 设置短信签名 2.4 设置短信模版 2.5 设置AccessKey 3 代码开发 3.1 导包 3.2 短信发送工具类SMSUtils 二、手机验证码登录 1 需求分析 …

C++自创题目——第一期

一、题目描述&#xff1a; 在一段时间内&#xff0c;到达港口的船有n艘&#xff0c;其中每艘船的信息包括:到达时间t(表示第t秒)&#xff0c;船上乘客数k&#xff0c;以及k名乘客的国籍。输出前3600s内每艘船上国籍种数&#xff0c;并输出国籍种数最少的船只的到达时间。 二、…

ThreeJS模型加载动画——从下向上加载

从下向上动态加载模型,模型本身是由点-线-面组成,setDynamic动态控制模型每个point的位置,让模型出现一个动态加载的效果,如下图: 1、首先将模型压扁,获取point的position位置,然后设置y轴的高度为0,并将原始高度记录到modelPositons用于后面还原高度。 //将物…

华为鲲鹏服务器

1.简介 鲲鹏通用计算平台提供基于鲲鹏处理器的TaiShan服务器、鲲鹏主板及开发套件。硬件厂商可以基于鲲鹏主板发展自有品牌的产品和解决方案&#xff1b;软件厂商基于openEuler开源OS以及配套的数据库、中间件等平台软件发展应用软件和服务&#xff1b;鲲鹏开发套件可帮助开发…

前端刷题-深浅拷贝

深拷贝 function deepClone(obj) {if (obj null || typeof obj ! "object") {return obj;}if (obj instanceof Date) {return new Date(obj);}if (obj instanceof Array) {const cloneArray [];for (let i 0; i < obj.length; i) {cloneArray[i] deepClone(o…

Android修改默认gradle路径

Android Studio每次新建项目&#xff0c;都会默认在C盘生成并下载gradle相关文件&#xff0c;由于C盘空间有限&#xff0c;没多久C盘就飘红了&#xff0c;于是就需要把gradle相关文件转移到其他盘 1、到C盘找到gradle文件 具体路径一般是&#xff1a;C:\Users\用户\ .gradle …

Python+PIL+qrcode实现二维码自由—普通二维码+彩色二维码+logo二维码+动态二维码(附完整代码)

有时候我们需要自己制作一个二维码&#xff0c;然后进行打印下来&#xff0c;或者说在二维码中提前写上一段话比如搞笑的话&#xff0c;然后印在衣服上&#xff0c;然后穿出去玩&#xff01;的&#x1f923; 那么今天我们分享一下制作二维码的几种方式&#xff1a; 哎&#x…

Linux服务器安装部署MongoDB数据库 – 【无公网IP远程连接】

文章目录 前言1.配置Mongodb源2.安装MongoDB数据库3.局域网连接测试4.安装cpolar内网穿透5.配置公网访问地址6.公网远程连接7.固定连接公网地址8.使用固定公网地址连接 前言 MongoDB是一个基于分布式文件存储的数据库。由 C 语言编写&#xff0c;旨在为 WEB 应用提供可扩展的高…

word表格左侧边线明明有,但却不显示

如题&#xff0c;解决方法&#xff1a; 方案一&#xff1a; 1&#xff09;选中表格 2&#xff09;布局菜单--->自动调整 3&#xff09;自动调整中&#xff0c;选择“根据窗口自动调整表格” 4&#xff09;表格左侧边线就显示出来了。 方案二&#xff1a;把表格粘贴到新…

macOS上制作arm64的jdk17镜像

公司之前一直用的openjdk17的镜像&#xff0c;docker官网可以直接下载&#xff0c;但是最近对接的一个项目&#xff0c;对方用的是jdk17&#xff0c;在对接的时候有加解密异常的问题&#xff0c;为了排查是不是jdk版本的问题&#xff0c;需要制作jdk17的镜像。docker官网上的第…

【AI】《动手学-深度学习-PyTorch版》笔记(二十一):目标检测

AI学习目录汇总 1、简述 通过前面的学习,已经了解了图像分类模型的原理及实现。图像分类是假定图像中只有一个目标,算法上是对整个图像做的分类。 下面我们来学习“目标检测”,即从一张图像中找出需要的目标,并标记出位置。 2、边界框 边界框:bounding box,就是一个方…

走进Linux系统

1.开机关机和基本目录介绍 /www 目录:存放服务器网站相关资源&#xff0c;环境&#xff0c;网站的项目

【GO】LGTM_Grafana_Tempo(2)_官方用例改后实操

最近在尝试用 LGTM 来实现 Go 微服务的可观测性&#xff0c;就顺便整理一下文档。 Tempo 会分为 4 篇文章&#xff1a; Tempo 的架构官网测试实操跑通gin 框架发送 trace 数据到 tempogo-zero 微服务框架使用发送数据到 tempo 根据官方文档实操跑起来 tempo&#xff0c;中间根…

数据分析师职业发展道路,工作内容是什么?

很多同学问&#xff0c;参加数据分析就业班后之的就业发展道路是怎样的&#xff0c;工作又能做什么呢&#xff1f; 市面上的常见的工作类型有有运营类、技术类及分析类等&#xff0c;可以根据自己的意愿去做适合自己的工作&#xff0c;但是任何工作其实都是需要一技之长。…

对 K8s Pod 安全有多少认识?

写在前面 简单整理&#xff0c;博文内容涉及&#xff1a; PSP 的由来PSA 的发展PSA 使用认知 不涉及使用&#xff0c;用于了解 Pod 安全 API 资源理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全…

File类/IO流介绍

一. File 概要&#xff1a;实现将数据从内存中存储到计算机硬盘中&#xff0c;存储方式以File的形式进行存储 File是Java.io包下的类&#xff0c;File类对象既可表示文件&#xff0c;又可表示文件夹 File类只能对文件本身进行操作&#xff0c;不能读写文件里存储的数据&#x…

Spring-SpringBoot-SpringMVC-MyBatis常见面试题

文章目录 Spring篇springbean是安全的的?什么是AOP你们工作中有用过AOP吗spring中的事务是如何实现的spring中事务失效场景Spring的生命周期spring中的循坏依赖springMVC的执行流程springboot的启动原理常用注解MyBatis执行流程Mybatis是否支持延迟加载&#xff1f;Mybatis的一…

Android studio实现圆形进度条

参考博客 效果图 MainActivity import androidx.appcompat.app.AppCompatActivity; import android.graphics.Color; import android.os.Bundle; import android.widget.TextView;import java.util.Timer; import java.util.TimerTask;public class MainActivity extends App…

【记录】Truenas scale|NFSv4数据集的子目录或文件的ACL完全访问权限继承老是继承不了怎么回事

我遇到了数据集下新建文件夹或文件&#xff0c;新建的文件夹或文件没有和数据集的ACL设置相符合的情况。其根本原因是NFSv4的完全访问权限要想继承的话&#xff0c;它的访问设置权限要设置“用户”和“组”的&#xff0c;就是&#xff0c;一定要选择中文的那个设置。纯owner和g…