编程算法 - 两个升序列的相同元素 代码(C)

两个升序列的相同元素 代码(C)

本文地址: http://blog.csdn.net/caroline_wendy

两个升序列的相同元素, 需要使用两个指针, 依次遍历, 如果相等输出, 如果小于或大于, 则增加一个指针.

直到输出所有的值.

代码:

/*
 * main.cpp
 *
 *  Created on: 2014.9.19
 *      Author: spike
 */

#include <stdio.h>

int Common(int data1[], int length1, int data2[], int length2, int res[]) {
	if (data1 == NULL || length1 <= 0 || data2 == NULL || length2 <= 0)
		return -1;
	int i=0, j=0, k=0;
	while (i < length1 && j < length2) {
		if (data1[i] == data2[j]) {
			res[k++] = data1[i];
			i++;
			j++;
		}
		else if (data1[i] < data2[j])
			i++;
		else
			j++;
	}
	return k;
}

int main(void)
{
	int data1[] = {1, 2, 4, 5, 6, 9, 11};
	int data2[] = {2, 5, 6, 8, 12};
	int length1 = sizeof(data1)/sizeof(data1[0]);
	int length2 = sizeof(data2)/sizeof(data2[0]);
	int max = length1 > length2 ? length1 : length2;
	int* res = new int[max];
	int num = Common(data1, length1, data2, length2, res);
	for (int i=0; i<num; ++i) {
		printf("%d ", res[i]);
	}
	printf("\n");

    return 0;
}

输出:

2 5 6

时间: 2024-08-03 22:51:02

编程算法 - 两个升序列的相同元素 代码(C)的相关文章

编程算法 - 两个链表的第一个公共结点 代码(C)

两个链表的第一个公共结点 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入两个链表, 找出它们的第一个公共结点. 计算链表的长度, 然后移动较长链表的指针, 使其到相同结点的距离的相同, 再同时移动两个链表的指针, 找到相同元素. 时间复杂度: O(n) 代码: /* * main.cpp * * Created on: 2014.6.12 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #i

编程算法 - 萨鲁曼的军队(Saruman&#39;s Army) 代码(C)

萨鲁曼的军队(Saruman's Army) 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 直线上有N个点, 每一个点, 其距离为R以内的区域里, 必须带有标记的点, 本身的距离为0. 尽可能少的添加标记点, 至少要有多少点被加上标记? 贪心算法, 从最左边的点开始, 依次查找距离为R需要添加标记的点, 直到结束. 代码: /* * main.cpp * * Created on: 2014.7.17 * Author: spike */

编程算法 - 不能被继承的类(模板参数友元) 代码(C++)

不能被继承的类(模板参数友元) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 用C++设计一个不能被继承的类. 可以使用模板类模板参数友元, 模板类私有构造函数, 类虚继承这个模板类, 如果类被其他类继承时, 则虚继承会直接调用模板类, 无法构造. 代码: /* * main.cpp * * Created on: 2014.7.13 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #inc

编程算法 - 圆圈中最后剩下的数字(递推公式) 代码(C++)

圆圈中最后剩下的数字(递推公式) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 0,1...,n-1这n个数字排成一个圆圈, 从数字0開始每次从这个圆圈里删除第m个数字. 求出这个圆圈里最后剩下的数字. 能够推导出约瑟夫环的递推公式, 使用循环进行求解,  时间复杂度O(n), 空间复杂度O(1). 代码: /* * main.cpp * * Created on: 2014.7.12 * Author: spike */ #incl

编程算法 - 圆圈中最后剩下的数字(循环链表) 代码(C++)

圆圈中最后剩下的数字(循环链表) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 0,1...,n-1这n个数字排成一个圆圈, 从数字0开始每次从这个圆圈里删除第m个数字. 求出这个圆圈里最后剩下的数字. 使用循环链表, 依次遍历删除, 时间复杂度O(mn), 空间复杂度O(n). 代码: /* * main.cpp * * Created on: 2014.7.13 * Author: Spike */ #include <iostr

编程算法 - n个骰子的点数(非递归) 代码(C)

n个骰子的点数(非递归) 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 把n个骰子仍在地上, 所有骰子朝上一面的点数之和为s. 输入n, 打印出s的所有可能的值出现的概率. 每次骰子的循环过程中, 本次等于上一次n-1, n-2, n-3, n-4, n-5, n-6的次数的总和. 代码: /* * main.cpp * * Created on: 2014.7.12 * Author: spike */ #include <stdio.

【python cookbook】【数据结构与算法】16.筛选序列中的元素

问题:提取出序列中的值或者根据某些标准对序列做删减 解决方案:列表推导式.生成器表达式.使用内建的filter()函数 1.列表推导式方法:存在一个潜在的缺点,如果输入数据非常大可能会产生一个庞大的结果,考虑到该问题,建议选择生成器表达式 # Examples of different ways to filter data mylist = [1, 4, -5, 10, -7, 2, 3, -1] print('mylist=',mylist) # 使用列表推导式 pos = [n for n

编程算法 - 将排序数组按绝对值大小排序 代码(C)

将排序数组按绝对值大小排序 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 排序的数组有可能包含正负, 可以使用折半查找确定中值位置, 然后再使用两个指针, 顺次排序两端. 解决思路是: 1.数组中的元素全为正,返回: 2.数组中的元素全为负,返回: 3.数组中有正数有负数,就用二分法查找,判断中间元素的符号 a)中间元素为正,继续判断中间元素前面一个元素的符号; b)中间元素为负,判断中间元素后一个元素的符号; c)中间元素为零,令其等于结果值返

编程算法 - 数字数组中只出现一次 代码(C)

数字数组中只出现一次 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 一个整型数组里除了两个数字以外, 其它的数字都出现了两次. 请敲代码找出这两个仅仅出现一次的数字. 假设从头到尾依次异或数组中的每个数字, 那么终于的结果刚好是那个仅仅出现一次的数字. 依据结果数组二进制某一位为1, 以此分组, 为1的一组, 为0的一组, 再又一次进行异或. 最后得出两个结果. 时间复杂度O(n). 代码: /* * main.cpp * * Creat