leetcode-经典面/笔试题目

简介: leetcode-经典面/笔试题目

1.消失的数字

这个题目当然有好几种解法,这里我推荐一种比较优秀的思路,也就是单身狗思路:异或

异或的特点是相异为一,相同为0,也就是两个相同的数字异或就等于0.

那么我们只需要使用两个循环就能解决问题。


第一个循环遍历nums这个数组的所有元素,由于少了一个元素5,所以判断条件是i<numsSize,假设数组中的元素如下所示,那么第二个循环只需要将这个消失的数字补上,判断条件就是i<=numsSize,然后tail和i进行异或。


那么我们就可以理解为tail在同时遍历两个数组,这里大家需要知道的一个小知识是3^4^3^4的最终结果还是0,因为这里可以使用交换律,就是3^3^4^4,就相当与两个0最后异或,还是0。除了消失的数字出现一次,其他的数字都是成对出现,所以tail结果两次遍历异或后就是消失的那个数字。


int missingNumber(int* nums, int numsSize)
{
   int tail=0,i;
   for(i=0;i<numsSize;i++)
   {
       tail^=nums[i];
   }
   for(i=0;i<=numsSize;i++)
   {
       tail^=i;
   }
   return tail;
}

2.轮转数组

这里我也提供一种比较优的思路,我们需要将这个数组逆置3次,第一次逆置前numsSize-1-k个元素,因为numsSize是元素个数,逆置的位置是下标,所以需要-1,第二次逆置后k个,第三次就是整体逆置。这种方法非常难想到,但是效率很高。


void Func(int* nums,int left,int right)
{
    while(left<=right)
    {
        int tmp=nums[left];
        nums[left]=nums[right];
        nums[right]=tmp;
        left++;
        right--;
    }
}
void rotate(int* nums, int numsSize, int k)
{
   if(k>=numsSize)
   {
       k=k%numsSize;
   }
   //第一次逆置前numsSize-k个
   Func(nums,0,numsSize-k-1);
   //第二次逆置后k个
   Func(nums,numsSize-k,numsSize-1);
   //第三次将整个数组逆置
   Func(nums,0,numsSize-1);
}


相关文章
|
28天前
|
程序员 C语言
【C语言】LeetCode(力扣)上经典题目
【C语言】LeetCode(力扣)上经典题目
|
2月前
|
SQL Oracle 关系型数据库
CASE WHEN 语句的语法及示例,LeetCode 题目 “确认率” 练习
本文介绍了SQL中CASE语句的两种形式和语法,并通过LeetCode题目“确认率”的SQL查询示例展示了CASE语句在实际问题中的应用,解释了如何使用CASE语句计算特定条件的比率。
|
3月前
|
算法
LeetCode第12题目整数转罗马数字
该文章介绍了 LeetCode 第 12 题整数转罗马数字的解法,通过使用 TreeMap 按照整数从大到小排序,先使用大的罗马数字表示整数,再用小的,核心是先表示完大的罗马数字,想通此点该题较简单。
LeetCode第12题目整数转罗马数字
|
3月前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
50 6
|
3月前
|
算法
LeetCode第13题目罗马数字转整数
该文章介绍了 LeetCode 第 13 题罗马数字转整数的解法,通过从大到小解析罗马数字,根据罗马数字的特点,按照从大到小的顺序匹配罗马数字和整数的关系,从而解决该问题,同时强调要注意观察题目考查的知识点特征。
|
5月前
|
C语言
详解Leetcode中关于malloc模拟开辟二维数组问题,涉及二维数组的题目所给函数中的各个参数的解读
详解Leetcode中关于malloc模拟开辟二维数组问题,涉及二维数组的题目所给函数中的各个参数的解读
32 1
|
5月前
|
算法
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
|
4月前
|
存储 算法
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
|
5月前
|
容器
【LeetCode刷题】栈和队列题目练习~
【LeetCode刷题】栈和队列题目练习~