1,合并数组【怨念】
其实这道题不难——但是!我以为相同的数字要删去!考虑了很久!
【实际并不用删】
题目:
AB两个排序数组,原地合并数组。(A当中穿插一些无效数字怎么处理?)
原理:注意,是原地合并数组
所以,假设a的后端空间足够大,判断长度后从后往前比较就可以了
代码如下:
#include <iostream>
#include <stdlib.h>
using namespace std;
/*
AB两个排序数组,原地合并数组。(A当中穿插一些无效数字怎么处理?)
1 a 4 b 5
3 6
*/
int main()
{
int a[20] = { 1,3,25,27 };
int b[] = { 2,25,27 };
int numa = 4;
int numb = 3;
int j = numb - 1;
int i = numa - 1;
int numm = numb + numa - 1;
int m = numm;
while (j >= 0)
{
if (i<0 || b[j]>=a[i])
{
a[m--] = b[j--];
}
else
{
a[m--] = a[i--];
}
}
return 0;
}
如果a中有其他字符:
在遍历的时候添加一个判断,如果是其他字符直接跳过就行了吧……
2,排序数组平方后求数组大小
题目: 一个排序数组求每个元素平方后不重复的元素个数。
例如:
数组:{-10, -10, -5, 0, 1, 5, 8, 10}
平方后:{100,100,25,0,1,25,64,100}
输出:5
思路:非常简单的一道题,用两个指针i与j左右同时遍历,按绝对值大小输出即可
代码如下:
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
int a[8] = { -10, -10, -5, 0, 1, 5, 8, 10 };
int i = 0;
int j = sizeof(a) / sizeof(a[0]) - 1;
int num = 0;
int temp = a[i];
while (i <= j)
{
if (temp == a[i])
{
i++;
continue;
}
if (temp == a[j])
{
j--;
continue;
}
if (abs(a[i]) > abs(a[j]))
{
temp = a[i];
num++;
i++;
}
else if (abs(a[i]) == abs(a[j]))
{
temp = a[i];
num++;
i++;
j--;
}
else
{
temp = a[j];
num++;
j--;
}
}
cout << num;
return 0;
}
3,