混合两个有序int数组到另一个有序数组并去重

题目:两个有序数组a和b,混合之,放在另一个数组c中,使得c也是有序数组(升序),去除重复的项。

虽然觉得不是很简便,但代码如下:

int merge_array (int *a , int *b, int *c, int n1, int n2)
{
    if (n1 < 0 || n2 < 0) {
        return -1;
    }
    int i = 0;
    int j = 0;
    int k = 0;
    int count = 0;
    while (i < n1 && j < n2) {
        if (a[i] < b[j]) {
            if (k == 0) {
                c[k++] = a[i++];
                count++;
            }else{
                if (c[k-1] != a[i]) {
                    c[k++] = a[i++];
                    count++;
                }else{
                    i++;
                }
            }
        }else if (a[i] == b[j]){
            if (k == 0) {
                c[k++] = a[i++];
                j++;
                count++;
            }else{
                if (c[k-1] != a[i]) {
                    c[k++] = a[i++];
                    j++;
                    count++;
                }else{
                    i++;
                    j++;
                }
            }
        }else{
            if (k == 0) {
                c[k++] = b[j++];
                count++;
            }else{
                if (c[k-1] != b[j]) {
                    c[k++] = b[j++];
                    count++;
                }else{
                    j++;
                }
            }
        }
    }
    while (i < n1) {
        if (k == 0) {
            c[k++] = a[i++];
            count++;
        }else{
            if (c[k-1] != a[i]) {
                c[k++] = a[i++];
                count++;
            }else{
                i++;
            }
        }
    }
    while (j < n2) {
        if (k == 0) {
            c[k++] = b[j++];
            count++;
        }else{
            if (c[k-1] != b[j]) {
                c[k++] = b[j++];
                count++;
            }else{
                j++;
            }
        }
    }
    return count;
}

测试代码如下:

int a[1] = {1};
        int b[1] = {2};
        int c[100] = {0};
        int count = merge_array(a, b, c, 1, 01);
        for (int i = 0; i < count; i++) {
            printf("c[%d] : %d\n", i, c[i]);
        }

测试多次,包括各种重复项、0项、负数项,运行都是正确的,欢迎大家提出更好的方法!

晚安。

时间: 2024-11-05 20:28:11

混合两个有序int数组到另一个有序数组并去重的相关文章

Bag标签之把字符串分割成数组,返回一个存放数组数据的书包(Bag)

把字符串分割成数组,返回一个存放数组数据的书包(Bag): 操作 <Bag id=test act=splitgap="/">a/b/c/d</Bag> 把字符串a/b/c/d数组,返回书包test,按关键字test0.test1.test2...取出分割后的值 输出分割后的值 <for end=0 [email protected]{test:getWidth}> <b>@{test:[email protected]{for:getS

两个有序数组合并为一个有序数组

突然想到了这个算法,记得以前看过,但是没写,怕自己会写不出这个算法,于是就把它用JAVA写出来,呵呵. 思想:先依次比较两个数组,按照小的就传入新的数组.当这次比较完之后可能有一个数组的长度很长,留下一些数组,然后在新数组的末尾插入即可. 代码: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 class ArraySort{ //两个有序数组

Python版将两个有序数组合并为一个有序数组

第一种思路,把两个数组合为一个数组然后再排序,问题又回归到冒泡和快排了,没有用到两个数组的有序性.(不好) 第二种思路,循环比较两个有序数组头位元素的大小,并把头元素放到新数组中,从老数组中删掉,直到其中一个数组长度为0.然后再把不为空的老数组中剩下的部分加到新数组的结尾.(好) 第二种思路的排序算法与测试代码如下: def merge_sort(a, b): ret = [] while len(a)>0 and len(b)>0: if a[0] <= b[0]: ret.appen

将两个有序数组合并为一个有序数组

原文地址:https://www.cnblogs.com/cjsblog/p/10015422.html

在数组中添加一个元素 数组顺序依旧正常排序

#import <Foundation/Foundation.h> int main(int argc, const charchar * argv[]) { @autoreleasepool { //原始数组 NSMutableArray *originalarray = [NSMutableArray arrayWithArray:@[@1, @3, @5, @7, @9]]; int inputnumber; scanf("%d",&inputnumber);

26、删除有序数组中的元素,数组仍然有序

删除有序数组中的元素,数组仍然有序 方法一: 删除一个有序数组的一个元素,采用两个数组实现 代码实现: /* 2017年6月19日16:16:31 功能:删除数组中一个数据之后数组依然有序 */ #include"stdio.h" #define M 9 int main() { int a[M] = {1,2,3,4,5,6,7,8,9}; int b[M-1]; int i, j, num; bool flag; printf("请输入将要删除的数据的数值:")

黑马程序员---C基础10【数组指针】【指针数组】【字符串指针】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- [数组指针] 1.数组指针: 定义一个指针指向数组的某一个元素 数组元素指针:指针变量可以指向数组元素: 1)数组名a不代表整个数组,只代表数组首元素的地址: 2)是指向首地址,而不是每一个元素:  2.数组指针的引用: 在指针向数组元素时,允许以下操作 加一个整数(用+或+=),如p+1: 减一个整数(用-或-=),如p-1: 自加P++ 自减p--; 两个指针相减:p1-p2: P+1指向

一维数组复习,二维数组与多维数组

输入班级人数,输入每个人的分数,求班级最高分,最低分,以及去掉两个最高分并且去掉两个最低分之后的所有人员的平均分. 输入班级人数,输入一个人名,输入一个分数.求班级最高分是多少,是谁的分数(注意姓名跟分数对应) 运用两个一维数组: 运用一个一维数组: 一个元素是一个点,一维数组是一条线,二维数组是一个面,三维数组是一个立体. 二维数组: int [,]array=new int[3,2]{ {1,2}, {2,3}, {3,4} }; 其中3表示有三个一维数组,2表示每个一维数组中有两个元素.

C语言中值得深入知识点----数组做函数参数、数组名a与&amp;a区别、数组名a的&quot;数据类型&quot;

1.数组作为函数参数 C语言中,数组做为函数的参数,退化为指针.数组作为参数传给函数时,传的是指针而不是数组,传递的是数组的首元素的地址.这里我们以将以整形变量排序来讲解. void sortArray(int a[] ,int num )以及void sortArray(int a[100] ,int num )都可以用void sortArray(int *a ,int num )表示.一般来说函数参数如果为数组,可以有两个参数,一个是数组名,一个是数组长度.对于排序而已,一般是要知道给定数