`
hy2012_campus
  • 浏览: 29091 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

合并两个数组为非递减数组

 
阅读更多
public int[] merge(int[] a,int[] b){
	int pa = pb = pc = 0;
	int m = a.length;
	int n = b.length;
	int[] c = new int[m+n];
	while(pa < m && pb < n){
		if(a[pa] < b[pb]){
			c[pc++] = a[pa++];
		}else{
			c[pc++] = b[pb++];
		}
	}
	if(pa < m){
		while(pa < m){c[pc++] = a[pa++];}
	}else{
		while(pb<n){c[pc++] = b[pb++];}
	}
	return c;
}

将数组a和b合并为一个新的非递减数组c

由此找出三个数组中公共元素:

import java.util.ArrayList;
import java.util.List;
 
public class FindCommonElements {
    public static List<Integer> commonElements(int[] a, int[] b, int[] c) {
        int len1 = a.length;
        int len2 = b.length;
        int len3 = c.length;
        List<Integer> result = new ArrayList<Integer>();
        int i = 0, j = 0, k = 0;
        while (i < len1 && j < len2 && k < len3) {
            if (a[i] == b[j] && b[j] == c[k]) {
                result.add(a[i]);
                i++;
                j++;
                k++;
            } else {
                int max = max(a[i], b[j], c[k]);
                while (i < len1 && a[i] < max)
                    i++;
                while (j < b.length && b[j] < max)
                    j++;
                while (k < c.length && c[k] < max)
                    k++;
            }
        }
        return result;
    }
    private static int max(int a, int b, int c) {
        return max(max(a, b), c);
    }
    private static int max(int a, int b) {
        return a >= b ? a : b;
    }
}

 

public static void main(String[] args) {
    int[] a = { 1, 5, 10, 20, 40, 80 };
    int[] b = { 1, 6, 7, 20, 80, 100 };
    int[] c = { 1, 3, 4, 15, 20, 30, 70, 80, 120 };
 
    List<Integer> result = FindCommonElements.commonElements(a, b, c);
    //[1, 20, 80]
    System.out.println(result);
}

 

分享到:
评论

相关推荐

    python 有序数组的平方,给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非

    # 有序数组的平方 ...# 方法比较多, 比如先找出最中心的数字后转换成两个数组进行归并运算, 但是双指针方法是最简单的 # 截止条件定在为正负分界线上, 一旦达到表示其中一个数字遍历完毕, 剩下的直接进行追加即可

    用链表实现有序合并集运算

    编程实现将两个有序表合并后仍然有序功能,要求分别采用数组法与链表法,并分析两种方法各自的优缺点。若用表La、Lb分别代表两个已存在的有序表,Lc为算法完成后产生新的有序表。可行的算法之一为:从表La与Lb中各取...

    合并排序数组:给定两个排序的整数数组nums1和nums2,将nums2合并为nums1作为一个排序的数组

    给定两个已排序的整数数组nums1和nums2,将nums2合并为nums1作为一个已排序的数组。 在nums1和nums2中初始化的元素数分别为m和n。 您可以假定nums1的大小等于m + n,以使其具有足够的空间来容纳nums2中的其他元素。...

    python实现合并两个排序的链表

    本来想用递归实现,但是大脑卡壳,没有想到合适的递归策略,潜意识里还是把两个链表当成两个数组来看待,写出了非递归版本的代码。写完后回看自己写的代码,逻辑不够一目了然,中间变量过多,代码过长,一定不是好...

    leetcode中国-LeetCode101:《LeetCode101》例题及练习题

    合并两个有序数组 142 环形链表 2 76 最小覆盖字串 练习 633 平方数之和 680 验证回文字符串 524 通过删除字母匹配到字典里最长单词 总结:Two Sum、归并两个有序数组、快慢指针、滑动窗口   第 4 章 居合斩!二分...

    leetcode答案-leetcode:享受

    整数的补码单值二叉树另一棵树的子树两句生僻字仅反转字母重复子串模式查找常见字符有序数组的平方反向链表合并两个排序列表回文链表链表中间删除链表中的节点搜索插入位置在二叉搜索树中搜索N-ary 树预序遍历N元树...

    《数据结构 1800题》

    6.数据结构中评价算法的两个重要指标是(时间复杂度和空间复杂度) 【北京理工大学 2001 七、1(2分)】 7. 数据结构是研讨数据的_(1)物理结构_和_(2)逻辑结构 _,以及它们之间的相互关系,并对与这种结构定义...

    世界500强面试题.pdf

    1.5.6. 输入两个整数 n 和 m,从数列 1,2,3.......n 中 随意取几个数 ....... 116 1.5.7. 输入一个表示整数的字符串,把该字符串转换成整数并输出.............. 118 1.5.8. 给出一个数列,找出其中最长的单调...

    leetcode2sumc-leetcode::check_mark_button:我在C++或Python中的Leetcode解决方案,所有解决方案都被接受

    非递减数组 中等的 763 分区标签 中等的 不。 标题 解决方案 困难 3 无重复字符的最长子串 中等的 15 3 总和 中等的 16 3 和最近 中等的 76 最小窗口子串 难的 142 链表周期 II 中等的 167 二和 II - 输入数组已排序...

    Excel公式与函数大辞典.宋翔(带书签高清文字版).pdf

    2.4.8 MMULT——计算两个数组的矩阵乘积 88 2.4.9 MUNIT——返回指定维度的单位矩阵 89 2.4.10 RAND——返回0到1之间的一个随机数 89 2.4.11 RANDBETWEEN——返回某个范围内的随机数 91 2.5 三角函数计算 91 ...

    C语言程序设计标准教程

    在主函数中输入n值,并作为实参,在调用时传送给s 函数的形参量n( 注意,本例的形参变量和实参变量的标识符都为n, 但这是两个不同的量,各自的作用域不同)。 在主函数中用printf 语句输出一次n值,这个n值是实参n的...

    常用算法代码

    | 最长有序子序列(递增/递减/非递增/非递减) 22 | 最长公共子序列 23 | 最少找硬币问题(贪心策略-深搜实现) 23 | 棋盘分割 23 | 汉诺塔 23 | STL 中的 PRIORITY_QUEUE 24 | 堆栈 24 | 区间最大频率 24 |...

    《Excel应用大全》示例文件 光盘文件

    • 使用两个一维数组构造二维数组 • 部门评价等级转换 • 使用MMULT 函数计算产品结构指数 • 产生1-10 的自然数垂直序列和水平序列 • 等比例构造一维循环数组 • SUMIF函数对产品产量进行逐行汇总 • 利用MMULT...

    Sorts:数据结构项目排序算法的可视化与比较

    更正式地说,输出必须满足两个条件: 输出按非递减顺序(根据所需的总顺序,每个元素不小于前一个元素); 输出是输入的排列(重新排序)。 此外,数据通常被视为允许随机访问的数组,而不是仅允许顺序访问的列表,...

    C++标准程序库STL的架构

    7.3.3 iter_swap()交换两个迭代器所指内容 68 7.4 迭代器配接器(adapter) 69 7.4.1 逆向迭代器 69 7.4.2 Insert迭代器 72 7.4.3 Stream迭代器 75 7.5 迭代器特性 76 8 STL仿函数 77 8.1 仿函数概念 77 8.1.1 仿函数...

Global site tag (gtag.js) - Google Analytics