与数组相关经典面试题

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary-walk

⸝⋆ ━━━┓

  • 个性标签 - :来于"云"的"羽球人"。 Talk is cheap. Show me the code

┗━━━━━━━ ➴ ⷯ

本人座右铭 : 欲达高峰,必忍其痛;欲戴王冠,必承其重。

👑💎💎👑💎💎👑

💎💎💎自💎💎💎

💎💎💎信💎💎💎

👑💎💎 💎💎👑 希望在看完我的此篇博客后可以对你有帮助哟

👑👑💎💎💎👑👑 此外,希望各位大佬们在看完后,可以互赞互关一下,看到必回

👑👑👑💎👑👑👑


一:原地移除指定的元素值

题目:
思路讲解:

我们以此数组为例:

1:首先定义2个变量 n1,n2都分别指向第一个元素(注意n2的初始值必须指向首元素)

2:当 numsn2 == val 向后移动n2一步

3:numsn2 != val 则执行 numsn1++ = numsn2++ 也就是 n2对应指向的元素赋值给 n1

草图见下:

OJ代码实现
cpp 复制代码
int removeElement(int* nums, int numsSize, int val)
 {
    //  int fast = 1,slow = 0; 注意这里fast必须初始值是0(可能存在第一个元素就为val)
   int n1 = 0,n2 = 0;
   while(fast<numsSize)
   {
       if(nums[n2] == val)
       {
           n2++;
       }
       else
       {
           nums[n1++] = nums[n2++];
       }

   }
return n1;
    
}

二:删除排序数组重复项

题目:
思路讲解:

这里我们一人是双指针的玩法:

1:定义2个指针n1 = 0,n2 = 1 注意n1,n2只表示下标的含义

2:numsn1 == numsn2 ,此时n2++

直到 numsn1 != numsn2 执行**nums++n1 = numsn2++**注意到底是先加加还是先用数值
草图见下:

OJ代码实现
cpp 复制代码
int removeDuplicates(int* nums, int numsSize)
 {
     int n1 = 0,n2 = 1;
     while(n2 < numsSize)
     {
         if( nums[n1] == nums[n2])
         {
             n2++;
         }
         else
         {
             nums[++n1] = nums[n2++];
         }
     }
    return n1+1;
}

三: 合并2个有序数组

题目:
思路讲解:

这里我们用三指针的玩法是最优解

1:定义三个变量l:返回新数组的大小;l1:数组1的大小;l2:数组2的大小

2:借助尾插的思想,比较2个数组元素谁大,取大的进行尾插到数组1的末尾,依次循环

3:注意第一个循环判断条件必须是 逻辑且(不能是逻辑或):因为当有一个数组已经走完的时候剩下 的那个未走完的数组直接进行赋值拷贝即可

4:若是第2个数组先走完的,那么此时已经完成了数组的合并

5:若是第1个数组先走完的下面还需要对数组2 余下的内容进行赋值拷贝
草图见下:

OJ代码实现
cpp 复制代码
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
 {
     /*
     借助尾插思想:从目标数组的最后一个位置开始进行:取2个数组中较大的元素尾插
     */
     int l= m+n-1,l1 = m-1,l2 = n-1;
     while(l1 >= 0 && l2 >= 0)
     {
         if(nums1[l1] >= nums2[l2])
         {
            nums1[l--] = nums1[l1--];
         }
         else
         {
             nums1[l--] = nums2[l2--];
         }
     }
     if(l1 < 0)
     {
        while(l2>= 0) 
        {
           nums1[l--] = nums2[l2--];  
        }
     }
    
}

结语:

以上就是今日为大家share 的内容。其实仔细看一下,发现这些题目还是有相似之处的。但是但是:做题的思路又有些出入,这时我们不妨静下心来好好复盘一下,看看是否有可以继续深挖的地方。

ok,接下来咱走起来,老铁你懂滴!

相关推荐
aaPIXa62213 分钟前
C++ 用 13 条规则让模型写出安全现代 C++
java·c++·安全
菜鸟不爱学28 分钟前
第P4周:猴痘病识别
算法
QN1幻化引擎42 分钟前
我写了一个「有八层意识结构」的 Python 认知引擎,它没有用任何 LLM
人工智能·算法·架构
j7~1 小时前
【数据结构初阶】顺序表增删查改代码实现--详解
数据结构·顺序表·动态顺序表·静态顺序表
神奇小汤圆1 小时前
2026 Java岗面试题库(已收录GitHub),覆盖所有考点
后端
ArixBit1 小时前
用 Go 手撸 Agent 框架 #4:工具定义与契约——让 Agent 学会调用多工具
后端
枕星而眠1 小时前
【数据结构】红黑树入门指南
运维·数据结构·c++·后端
神奇小汤圆2 小时前
JDK 8 → 17 → 21 → 25:一次性讲清四代版本的关键跃迁
后端
2601_949817722 小时前
C++指针与引用深度精讲:底层原理、差异对比与高阶实战陷阱
java·jvm·c++
要阿尔卑斯吗2 小时前
无限深度章节树如何一遍建成?路径编码+单调栈
后端