力扣刷题第0天:只出现一次的数字

目录

第一部分:题目描述

​第二部分:题目分析

第三部分:解决方法

[3.1思路1: 双指针暴力求解](#3.1思路1: 双指针暴力求解)

[3.2 思路2:异或运算](#3.2 思路2:异或运算)

第四部分:总结收获


第一部分:题目描述

第二部分:题目分析

由图片分析可得,该题目对算法时间复杂度有一定的要求时间复杂度为O(N) ,空间复杂度为O(1),这是关键所在,也就是说只能遍历有限次数组,便可以找到那个单独出现的那个数字。

第三部分:解决方法

3.1思路1:双指针暴力求解

定义两个整型变量代表指针,利用双层for循环,外层循环i指向每个元素,内层循环j开始从当前元素的下个位置开始遍历整个数组,寻找是否存在与该元素相同的元素。如果发现了一个相同的元素,计数器加1,否则内层循环继续往下遍历,内层循环结束了但是没有发现相同的元素,那么count一直为0,并且i下标对应的元素a[i]就是单独出现的元素,直接返回即可,当内层循环处理一遍之后,继续处理外层循环的下一个元素i+1,直到把每一个元素都查找过。 但是时间复杂度为:O(n^2)不符合要求。

cpp 复制代码
int singleNumber(int* nums, int len) 
{	
	int i = 0;
    //1.针对外层循环每个元素,让内层循环依次与之进行对比
	for (; i < len; i++)
	{
		int count = 0;
   //2.内层循环从下一个位置开始,进行比对,同时记录,出现相同的次数
		for (int j = i+1; j < len; j++)
		{
			if (nums[i] == nums[j])
			{
				count++;	//每出现相同的元素,计数器就会加1
			}
		}
   
   //3.说明没有找到相同的元素,直接返回下标i对应的元素即可
		if (count == 0)
		{
			return nums[i];
		}	
	}
   
	return -1;  
}

3.2 思路2:异或运算

异或运算是属于位运算的一种,它是按照位置进行运算的,位与位异或,相同为0,不相同为1,同时,位运算(按位与、按位或、按位异或)是满足交换律和结合律的,因此,位运算它是没有顺序之分的,改变数的运算顺序,并不会改变最后的结果。

在这道题中,解题的思路在于:两个相同的数异或结果一定是0,0和任何数异或是它本身,因此,我们只需从第一个数字开始依次与该数组剩下的每个数字异或,最后留下来的便是所求的数字了。(双爆胎数字异或结果为0,再与其他数异或,并不会改变这个数,最后只剩下单独出现的那个数字,也就是缺失的数字。)

cpp 复制代码
int singleNumber(int* nums, int numsSize)
{
    int result = nums[0];
    for (int i = 1; i < numsSize; i++)
    {
        result ^= nums[i];
    }
    return result;
}

第四部分:总结收获

在数组的遍历中,可以利用整型变量/下标来代替指针,用于标记元素的位置,这道题引入了双指针思想来通过双层for循环暴力求解问题,这是算法题中一个基本的思想,必须熟练掌握。此外,异或运算具有"消消乐"的特点,需要注意。

在后续更新中,我会一直写关于OJ题的题解,有兴趣的小伙伴可以关注作者,和作者讨论其他OJ题目,如果觉得内容不错,请给个一键三连吧,蟹蟹你哟!!!制作不易,如有不正之处敬请指出,感谢大家的来访,UU们的观看是我坚持下去的动力, 在时间的催化剂下,让我们彼此都成为更优秀的人吧!!!

相关推荐
We་ct几秒前
LeetCode 242. 有效的字母异位词:解法解析与时空优化全攻略
前端·算法·leetcode·typescript
执着259几秒前
力扣hot100 - 104、二叉树的最大深度
算法·leetcode·职场和发展
_OP_CHEN2 分钟前
【算法基础篇】(五十四)解析错排问题:从信封错位到编程实战,一次性搞懂排列组合中的 “反常识” 难题!
算法·蓝桥杯·c/c++·组合计数·算法竞赛·acm/icpc·错排问题
苦藤新鸡10 分钟前
54 子集
算法·leetcode·动态规划
近津薪荼10 分钟前
递归专题5——快速幂
c++·学习·算法
小龙报12 分钟前
【数据结构与算法】指针美学与链表思维:单链表核心操作全实现与深度精讲
c语言·开发语言·数据结构·c++·物联网·算法·链表
一起养小猫13 分钟前
Flutter for OpenHarmony 实战:扫雷游戏算法深度解析与优化
算法·flutter·游戏
!停1 小时前
数据结构二叉树——堆
java·数据结构·算法
一匹电信狗9 小时前
【LeetCode_547_990】并查集的应用——省份数量 + 等式方程的可满足性
c++·算法·leetcode·职场和发展·stl
鱼跃鹰飞10 小时前
Leetcode会员尊享100题:270.最接近的二叉树值
数据结构·算法·leetcode