博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线段的内部查找
阅读量:7117 次
发布时间:2019-06-28

本文共 1741 字,大约阅读时间需要 5 分钟。

hot3.png

题目介绍:

定义线段:

//线段,表示起点和终点
public class Segment {
      int start;
      int end;
      public Segment(int start,int end)
      {
          this.start=start;
          this.end=end;
      }
}
题目:

//假设两个list有序,且线段不相交,即后一个segment的start大于前一个segment的end。p判断前一个list是否包含后一个list

        List<Segment> l1=new ArrayList<Segment>();
        List<Segment> l2=new ArrayList<Segment>();

代码:

import java.util.ArrayList;

import java.util.List;
public class SegmentDemo {
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //假设两个list有序,且线段不相交,即后一个segment的start大于前一个segment的end。p判断前一个list是否包含后一个list
        List<Segment> l1=new ArrayList<Segment>();
        List<Segment> l2=new ArrayList<Segment>();
        l1.add(new Segment(1, 3));
        l1.add(new Segment(5, 10));
        l2.add(new Segment(5, 6));
        l2.add(new Segment(7, 11));
        SegmentContain seContain=new SegmentContain();
        if(seContain.segcontains(l1, l2))
            System.out.println("true");
        else
            System.out.println("false");
                
    }
}

import java.util.List;

import javax.imageio.stream.IIOByteBuffer;
public class SegmentContain {
     public boolean segcontains(List<Segment> l1,List<Segment> l2)
     {
         int i=0;
         int j=0;
         int leng1=l1.size();
         int leng2=l2.size();
         int number=0;
         for(;i<leng1 && j<leng2;)
         {
             int value=isequal(l1.get(i),l2.get(j));
             if(value==0)
             {j++;number++;}
             else if (value<0)
             {
                 i++;
             }
             else {
                j++;
                number++;
            }
         }
         if(number==leng2)
             return true;
         else {
            return false;
        }
        
     }
     
     private int isequal(Segment s1,Segment s2)
     {
         if(s1.start>s2.start)
         {
             return -1;
         }
         else {
            if(s1.start==s2.start)
            {
                if(s1.end==s2.end)    //线段相等,返回0,i,j均相加
                    return 0;
                else if (s1.end<s2.end)  //
                {
                    return -1;
                }
                else
                {
                    return 0;
                    
                }
            }
            else {
                if(s1.end==s2.end)
                    return 0;
                else if (s1.end<s2.end)
                {
                    return -1;
                    
                }
                else {
                    return 1;       //线段包含,返回1,表示list2向后平移
                }
            }
        }
     }
}

转载于:https://my.oschina.net/ashan2012/blog/212065

你可能感兴趣的文章
AutoResetEvent和ManualResetEvent用法
查看>>
简单排序
查看>>
python SMTP 发送邮件
查看>>
windows 安装zookeeper
查看>>
最大流问题
查看>>
Android 开发知识小集
查看>>
函数调用堆栈 涉及汇编(转)
查看>>
《程序员代码面试指南》第一章 栈和队列 由两个栈组成的队列
查看>>
20-python基础9-生成器
查看>>
比遇见什么样的人更重要的,是先成为什么样的人
查看>>
windows下安装python科学计算环境,numpy scipy scikit ,matplotlib等
查看>>
WPF QuickStart系列之线程模型(Thread Model)
查看>>
LoadRunner ---协议分析
查看>>
远程shell脚本执行工具类
查看>>
ffmpeg 压缩音频遇到mac下播放时长不对的问题
查看>>
React创建组件的三种方式比较和入门实例
查看>>
IO流 合并流
查看>>
Win7 如何阻止程序联网
查看>>
Java岗 面试考点精讲(网络篇03期)
查看>>
PBOC规范研究之五、安全相关的PKI基础知识(转)
查看>>