1.4.12编写一个程序,有序打印给定的两个有序数组(含有N个int值)中的所有公共元素,程序在最坏情况下所需的运行时间应该和N成比。
答:

import java.util.Arrays;
public class TheSameElement
{
  public static void main(String[] args)
  {
     int[] a1=In.readInts(args[0]);
     int[] a2=In.readInts(args[1]);
     Arrays.sort(a1);
     Arrays.sort(a2);
     int a1lo=0;
     int a2lo=0;
     int a2KeyIndex=0;
     while (a1lo<a1.length && a2lo<a2.length)
     {
       a1lo=rankMax(a1,a1lo,a1.length-1,a1[a1lo]);
       a2KeyIndex=rankMax(a2,a2lo,a2.length-1,a1[a1lo]);
       if(a2KeyIndex!=-1)
       {
         StdOut.println(a1[a1lo]);
         a2lo=a2KeyIndex+1;
       }
       a1lo++;
     }
    
  }
 
   private static int rankMax(int[] a,int lo,int hi,int key)
  {
    int keyIndex=-1;
    while(lo<=hi)
    {
      int mid=lo+(hi-lo)/2;
      if (key<a[mid]) hi=mid-1;
      else if(key>a[mid]) lo=hi+1;
      else
      {
        keyIndex=mid;
        lo=mid+1;
      }//end if
    }//end while
      return keyIndex;
}//end rankMax
}

转载于:https://www.cnblogs.com/longjin2018/p/9854418.html

Algs4-1.4.12找出两个有序数组的公共元素-方法1相关推荐

  1. C++leetcode找出两个有序数组的中位数(2)

    给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 如果不考虑复杂度的话这个题目很简单:将两 ...

  2. 高效的找出两个List中的不同元素

    转自同名博文,未知真正出处,望作者见谅 如题:有List<String> list1和List<String> list2,两个集合各有上万个元素,怎样取出两个集合中不同的元素 ...

  3. 找出两个List集合重复的元素

    前几天,有个同事问我说怎么找出两个List集合中重复的元素,我当时就说一个集合在外面循环,一个集合在内循环,如果两个元素相等了,就找出来了,我回来一想还是不对,要是数据非常多,这样循环下去,服务器会卡 ...

  4. 找出两列表的共有元素python_python 找出两个dataframe中不同的元素

    pandas从Excel中读取数据,数据格式为dataframe格式 用for循环对进行两个列的数据比较想找出不同的元素时,发现数据是一样的,但是比较结果却是相同和不同的都存在(总之就是不是我以为的效 ...

  5. python 找出两个dataframe中不同的元素

    pandas从Excel中读取数据,数据格式为dataframe格式 用for循环对进行两个列的数据比较想找出不同的元素时,发现数据是一样的,但是比较结果却是相同和不同的都存在(总之就是不是我以为的效 ...

  6. 找出两个字符串数组中的相同元素

    public static List<String> getAllSameElement1(String[] strArr1,String[] strArr2) { if(strArr1 ...

  7. 给定两个单链表,编写算法找出两个单链表的公共结点(暴力解题,优化解题)

    算法思想一:暴力解题,设置两个指针p,q,其中q遍历一次单链表,q向后移动一位,直到两个指针指向同一个结点为止. void search(LinkList L, LinkList S){ LNode ...

  8. 递归分治问题之找出两个有序序列的中间值

    问题描述: You are interested in analyzing some hard-to-obtain data from two separate databases. Each dat ...

  9. 用四种方法Python求出两个有序数组中的中位数

    方法一: def median_1(A, B):# 思路一: 先组合成一个有序数列,再取中位数# 时间复杂度O(m+n)len_A = len(A)len_B = len(B)C = []if len ...

最新文章

  1. Grafana常用的监控
  2. Android下实现数据绑定功能
  3. Python快速学习09: 函数的参数
  4. 前端学习(2852):简单秒杀系统学习之鼠标点击方法
  5. android小游戏模版—重力感应
  6. 21天Jmeter打卡Day20 响应断言,JSON断言
  7. 安卓手机使用VNET抓包京东wskey
  8. 英语语法之后缀决定词性
  9. MySQL中的any_value()函数
  10. java之excel模板下载
  11. MATLAB之极限、积分、微分
  12. 【AUDIO音频兴趣拓展】如何测试喇叭端功率?音频功放输出端测试到波形为方波
  13. [CF1091F](New Year and the Mallard Expedition)
  14. 华为为LG Uplus提供10万个NB-IoT芯片和模块
  15. html中aspx的cs文件是css吗,在asp.net 中怎么在.aspx.cs的文件里写代码来改变页面的颜色...
  16. 上千年等待终唤“热潮“,汉服的未来会一帆风顺吗?
  17. c语言中有余数的除法,《有余数的除法》课堂实录
  18. 2023年软考信息安全工程师备考学习笔记汇总
  19. springBoot 接受post参数
  20. Android编程小技巧

热门文章

  1. 洛谷P1546 最短网络 Agri-Net
  2. Redis 启动与授权
  3. 基于新唐M0的XXTEA加密解密算法源码
  4. windows 7安装sql server2005以及com (-1073737712错误)+ 8004e00f错误
  5. MyEclipse连接oracle9i:invalid or unknown NLS parameter value specified错误
  6. 数据转数字类型的方法总结
  7. IP修改器的作用以及用途
  8. 丢掉DDoS的八个幻想
  9. 1、Android测试入门
  10. [翻译] NSRegexTester