多段数据压缩

本文介绍了使用Java编程计算一维数据中两点间斜率的方法,通过比较相邻点的斜率变化来确定拐点,最后用Scanner和ArrayList处理输入数据并输出拐点坐标。
摘要由CSDN通过智能技术生成

核心思路

计算中间点与前后点之间的斜率,不相同则说明是拐点。
若分母为0则取倒数。

代码细节

import java.util.*;

public class Main {
    public static int  calcuate(int x1,int y1,int x2,int y2){
        int xie=0;
    if (x2-x1!=0){
        xie=(y2-y1)/(x2-x1);
    }else {
        xie=(x2-x1)/(y2-y1);//分母为0则斜率取倒数
    }
        return xie;
    }
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        String[] str=scanner.nextLine().split(" ");
        int[] num=new int[str.length];
        for (int i = 0; i < str.length; i++) {
            num[i]=Integer.parseInt(str[i]);
        }
        List<int[]> list=new ArrayList<>();
        for (int i = 0; i < str.length; i+=2) {
            list.add(new int[]{num[i],num[i+1]});
        }
        List<int[]> res=new ArrayList<>();
        res.add(new int[]{num[0],num[1]});
        for (int i = 0; i < list.size()-2; i++) {
           int xie1= calcuate(list.get(i)[0],list.get(i)[1],list.get(i+1)[0],list.get(i+1)[1]);
           int xie2= calcuate(list.get(i+1)[0],list.get(i+1)[1],list.get(i+2)[0],list.get(i+2)[1]);
           if (xie1!=xie2){
               res.add(new int[]{list.get(i+1)[0], list.get(i+1)[1]});
           }
        }
        res.add(new int[]{num[num.length-2], num[num.length-1]});
        Iterator<int[]> iterator= res.iterator();
        while (iterator.hasNext()){
            System.out.println(Arrays.toString(iterator.next()));
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值