60天力扣打卡(第一天)

简介: 60天力扣打卡(第一天)

我今天要开启一个新系列,那就是60天力扣打卡。今天我要打卡的是题号为136的小题。


136. 只出现一次的数字


给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。


你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。

示例 1 :

输入:nums = [2,2,1]

输出:1


示例 2 :

输入:nums = [4,1,2,1,2]

输出:4


示例 3 :

输入:nums = [1]

输出:1

提示:

  • 1 <= nums.length <= 3 * 104
  • -3 * 104 <= nums[i] <= 3 * 104
  • 除了某个元素只出现一次以外,其余每个元素均出现两次。

我们面对此题,有两种思路。

思路一:

用两次循环遍历数组,第一层循环遍历数组是为了指定一个元素,用count代表这个指定元素的个数,第二层循环遍历数组是为了寻找指定元素在此数组中的个数,如果个数大于一不用返回指语言定元素,个数等于1,需要返回指定元素。下面是我用C语言写的代码,我的实力不足,请供参考。

int singleNumber(int * nums,int numsSize)
{
       for(int i=0;i<numsSize;i++)
       {
            int count=0;
              for(int j=0;j<numsSize;j++)
              {
                     if(num[i]==num[j])
                           count++;
                                              }
                if(count==1)
                     return *(nums+i);
                                                    }
                       return 0;//必须要加,力扣平台上不加编译不过去
                                                               }        

思路二:

我们在离散数学中学过位运算,位运算是基于bit位上的运算。最常用的位运算有:与&,或|,异或^。假设A与B是bit位上的数,那门A,B的取值为0或1。假设A取0,B取0,那么A|B=0,A&B=0,A^B=0;假设A取1,B取0,那么A|B=1,A&B=0,A^B=1;假设A取0,B取1,那么A|B=1,A&B=0,A^B=1;假设A取1,B取1,那么A|B=1,A&B=1,A^B=0。故我们可以推出,当A与B是一个int类型的数据,并且A与B不是同一个数字,那么A^A=B^B=0,A^B=B^A,假设A=0,那么A^B=B。我i们第二个思路是根据这个来的。C代码请供参考。

 

int singleNumber(int *nums,int numsSize)
{ 
         int n=*(nums+0);
         for(int i=1;i<numsSize;i++)
         {
                n=n^nums[i];
                                      }//根据A^A^B=B
              return n;
                                               }

我现在用1个例子给大家演示。

示例 :

输入:nums = [2,2,1]

输出:1

假设nums = [2,2,1],那么n=*(nums+0)=nums[0]=2,当i为1时,n=n^nums[i]=n^nums[1]=2^2=0;

当i为2时,n=n^nums[i]=n^nums[2]=0^1=1。于是当输入为[2,2,1]时,输出为1。

相关文章
|
2月前
|
存储 缓存 安全
系统显卡驱动程序卸载工具,DDU中文绿色版下载,免费显卡驱动彻底卸载工具
Display Driver Uninstaller(DDU)是一款专业显卡驱动卸载工具,支持彻底删除AMD/NVIDIA/Intel显卡驱动及相关残留文件,适用于驱动损坏、版本过旧或系统冲突等情况。绿色版无需安装,操作简单,可帮助用户实现干净的驱动环境。
818 0
|
29天前
|
机器学习/深度学习 编解码 运维
数据驱动的自适应线性调频模式分解研究(Matlab代码实现)
数据驱动的自适应线性调频模式分解研究(Matlab代码实现)
|
11月前
|
存储 Kubernetes 开发工具
k8s学习--ConfigMap详细解释与应用
ConfigMap 是 Kubernetes 中用于管理非机密配置数据的 API 对象,可将应用配置与容器分离,便于动态管理和更新。它支持四种创建方式:命令行参数、多个文件、文件内的键值对以及 YAML 资源清单文件。ConfigMap 可通过环境变量或挂载为卷的方式传递给 Pod,并且当通过卷挂载时支持热更新。这使得配置管理更加灵活和安全,无需重新部署应用即可更新配置。
526 0
|
运维 Prometheus 监控
在Linux中,如何监控系统资源使用情况?
在Linux中,如何监控系统资源使用情况?
|
应用服务中间件 Apache nginx
【独家揭秘】502 Bad Gateway不再神秘!五大绝招教你快速定位并解决,从此告别网络烦恼!
【8月更文挑战第19天】遇到502 &quot;Bad Gateway&quot;错误让不少开发者头疼。此错误指示Web服务器作为代理收到无效响应。本文将分步骤指导如何排查与解决502问题:首先检查服务器日志文件寻找线索;接着验证后端服务器状态及连通性;然后审查Web服务器配置确保代理设置无误;再检测后端服务器响应时间避免超时;最后利用抓包工具深入分析网络通信。遵循这些步骤,可助你高效定位并解决502错误。
3228 0
|
SQL Oracle 关系型数据库
Oracle中的Case-When的使用场景
Oracle中的Case-When的使用场景
279 1
|
JSON API 数据安全/隐私保护
api接口怎么使用
API接口的使用在当今的软件开发中非常普遍,它允许不同的应用程序或服务之间进行数据交换和功能交互。API接口使得开发人员能够将不同的系统或平台集成在一起,以实现更复杂的功能和应用。本文将详细介绍API接口的使用方法和代码实现。
|
SQL 消息中间件 搜索推荐
Flink X Hologres构建企业级Streaming Warehouse
Flink X Hologres构建企业级Streaming Warehouse
1986 2
Flink X Hologres构建企业级Streaming Warehouse
|
域名解析 Ubuntu 安全
如何在 Ubuntu 20.04 上安装 Visual Studio Code
Visual Studio Code 是一个由微软开发的强大的开源代码编辑器。它包含内建的调试支持,嵌入的 Git 版本控制,语法高亮,代码自动完成,集成终端,代码重构以及代码片段功能。本文主要为大家讲解两种在 Ubuntu 20.04 上安装 Visual Studio Code 的方式。
60867 1
如何在 Ubuntu 20.04 上安装 Visual Studio Code
|
存储 弹性计算 Linux
阿里云服务器快速购买、自定义购买和通过活动选购三种方式图文教程及区别解析
阿里云服务器可以通过快速购买、自定义购买和活动选购三种方式去购买,这是一般用户最常见的购买方式,每种购买方式都有自己的适合场景,也有很多需要注意的地方,下面是这些购买方式的具体图文教程及注意事项,以供参考。
600 0
阿里云服务器快速购买、自定义购买和通过活动选购三种方式图文教程及区别解析