C++算法数组相关(未完结)

    技术2026-06-14  23

    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,

    Processed: 0.010, SQL: 10