大家好,我是安然无虞。
文章目录
- 每篇前言
- 一、选择填空题
- 1.简单指针问题
- 2.函数指针问题
- 3.操作符优先级问题
- 二、编程设计题
- 1.面试题:移除元素
- 思路一:
- 思路二:空间换时间
- 思路三:双指针算法
- 2.面试题:合并两个有序数组
- 思路一:归并思想
- 思路二:多指针方法
- 三、遇见安然遇见你,不负代码不负卿。
每篇前言
作者:安然无虞
作者请求:由于博主水平有限,难免会有错误和不准之处,我也非常渴望知道这些错误,恳请铁汁批评斧正。
一、选择填空题
1.简单指针问题
一道简单的选择题:代码分析:
2.函数指针问题
分析下面两段代码:首先,我们遇到这样的题目时,要学会的是断句,(也就是清楚哪两个括号相互对应),这点是非常重要的。
代码1:
(* (void(*)() )0 )();
代码分析:代码2:
void (*signal(int, void(*)(int)))(int);
代码分析:
3.操作符优先级问题
看下面代码 :代码分析:
二、编程设计题
1.面试题:移除元素
题目链接:移除元素 题目描述:示例:
思路一:
思路二:空间换时间
思路三:双指针算法
代码执行:
int removeElement(int* nums, int numsSize, int val)
{
int src = 0;
int dst = 0;
while(src < numsSize)
{
//1.src位置不是val就将它放到dst位置,然后src++,dst++
//2.src位置是val,src++
if(nums[src] != val)
{
nums[dst++] = nums[src++];
}
else
{
src++;
}
}
return dst;
}
完整代码:
2.面试题:合并两个有序数组
题目链接:合并两个有序数组 题目描述:示例:
思路一:归并思想
思路:
思路二:多指针方法
代码执行:
void merge(int* nums1, int nums1Size, int m, int* nums2, int >nums2Size, int n)
{
int end1 = m - 1;
int end2 = n - 1;
int end = m + n - 1;
while(end1 >= 0 && end2 >= 0)//注意哦,不能是||
{
if(nums1[end1] > nums2[end2])
nums1[end--] = nums1[end1--];
else
nums1[end--] = nums2[end2--];
}
//如果end1没完,不需要处理,因为就在nums1里面
while(end2 >= 0)
{
nums1[end--] = nums2[end2--];
}
}
完整代码:
三、遇见安然遇见你,不负代码不负卿。
码字不易,求三连鸭