四川网站建设网站制作,16888精品货源入口,网站建设验收模板,价格低廉的意思1.消失的数字
面试题 17.04. 消失的数字 - 力扣#xff08;LeetCode#xff09;https://leetcode.cn/problems/missing-number-lcci/
这个题目当然有好几种解法#xff0c;这里我推荐一种比较优秀的思路#xff0c;也就是单身狗思路#xff1a;异或。
异或的特点是相异…1.消失的数字
面试题 17.04. 消失的数字 - 力扣LeetCodehttps://leetcode.cn/problems/missing-number-lcci/
这个题目当然有好几种解法这里我推荐一种比较优秀的思路也就是单身狗思路异或。
异或的特点是相异为一相同为0也就是两个相同的数字异或就等于0. 那么我们只需要使用两个循环就能解决问题。 第一个循环遍历nums这个数组的所有元素由于少了一个元素5所以判断条件是inumsSize,假设数组中的元素如下所示那么第二个循环只需要将这个消失的数字补上判断条件就是inumsSize,然后tail和i进行异或。 那么我们就可以理解为tail在同时遍历两个数组这里大家需要知道的一个小知识是3^4^3^4的最终结果还是0因为这里可以使用交换律就是3^3^4^4,就相当与两个0最后异或还是0。除了消失的数字出现一次其他的数字都是成对出现所以tail结果两次遍历异或后就是消失的那个数字。 int missingNumber(int* nums, int numsSize)
{int tail0,i;for(i0;inumsSize;i){tail^nums[i];}for(i0;inumsSize;i){tail^i;}return tail;
} 2.轮转数组
189. 轮转数组 - 力扣LeetCodehttps://leetcode.cn/problems/rotate-array/description/这里我也提供一种比较优的思路我们需要将这个数组逆置3次第一次逆置前numsSize-1-k个元素因为numsSize是元素个数逆置的位置是下标所以需要-1第二次逆置后k个第三次就是整体逆置。这种方法非常难想到但是效率很高。 void Func(int* nums,int left,int right)
{while(leftright){int tmpnums[left];nums[left]nums[right];nums[right]tmp;left;right--;}
}
void rotate(int* nums, int numsSize, int k)
{if(knumsSize){kk%numsSize;}//第一次逆置前numsSize-k个Func(nums,0,numsSize-k-1);//第二次逆置后k个Func(nums,numsSize-k,numsSize-1);//第三次将整个数组逆置Func(nums,0,numsSize-1);
}