现有30个坐标,要求两两进行比较计算,若某点与其他29个点比较时,距离该点10KM范围内的坐标点个数大于10个,则取出该坐标,依次循环。
要求用Java实现这个功能。
现在能想到的方法即为两层for循环进行两两比较,是否还有更好的算法计算?
#Java
用java实现取坐标中密集范围
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
关注 【以下回答由 GPT 生成】
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class CoordinateFinder { // Helper class to represent a coordinate point private static class Coordinate { double x; double y; public Coordinate(double x, double y) { this.x = x; this.y = y; } } // Function to calculate distance between two coordinates private static double calculateDistance(Coordinate point1, Coordinate point2) { double xDiff = point2.x - point1.x; double yDiff = point2.y - point1.y; return Math.sqrt(xDiff * xDiff + yDiff * yDiff); } // Function to find coordinates within a specified range public static List<Coordinate> findCoordinates(List<Coordinate> points, double range, int minCount) { Map<Coordinate, Integer> countMap = new HashMap<>(); List<Coordinate> result = new ArrayList<>(); for (int i = 0; i < points.size(); i++) { Coordinate point1 = points.get(i); int count = 0; for (int j = 0; j < points.size(); j++) { if (i != j) { Coordinate point2 = points.get(j); double distance = calculateDistance(point1, point2); if (distance <= range) { count++; } } } countMap.put(point1, count); if (count >= minCount) { result.add(point1); } } return result; } public static void main(String[] args) { // Sample usage List<Coordinate> points = new ArrayList<>(); // Add your 30 coordinate points here double range = 10.0; // Range in kilometers int minCount = 10; List<Coordinate> result = findCoordinates(points, range, minCount); System.out.println("Coordinates within " + range + " km range with at least " + minCount + " points:"); for (Coordinate coordinate : result) { System.out.println("(" + coordinate.x + ", " + coordinate.y + ")"); } } }
这个解决方案使用了两层for循环,但通过使用一个Map来存储每个点与其他点的距离计数,可以避免重复计算距离,进一步提高效率。并且只有在某个点的距离小于等于指定范围的情况下才会进行计数,这也有助于减少计算量。
这个解决方案的时间复杂度为O(n^2),其中n表示点的数量。由于只有30个坐标点,所以在这个范围内,这个算法应该足够高效。
请将你的30个坐标点添加到代码的示例用法部分,并将range和minCount设置为你需要的值。运行代码将输出满足要求的坐标点。
【相关推荐】
- 这个问题的回答你可以参考下: https://ask.csdn.net/questions/335343
- 这篇博客也不错, 你可以看下Java数组练习:返回一个新数组,数组的元素为这个给定数组中元素从大到小排序的下标值再加10。
- 您还可以看一下 徐无忌老师的Java进阶高手课-并发编程透彻理解课程中的 什么是多线程的上下文切换,有什么影响?如何进行优化?(一)小节, 巩固相关知识点
- 除此之外, 这篇博客: Java编程笔试时输入问题:如何输入固定长度、不定长度的一维数组?如何输入固定长度、不定长度的二维数组?中的 五、如何将数组中的内容输出(不要中括号以及逗号) 部分也许能够解决你的问题。
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决 无用评论 打赏 举报
悬赏问题
- ¥15 远程访问linux主机超时
- ¥15 odoo17存货管理优势于中国国内该行业传统ERP或MES的详细解读和举例
- ¥15 CPU卡指令整合指令数据都在图片上
- ¥15 火车票关联12306问题
- ¥15 odoo17处理受托加工产品
- ¥15 如何用MATLAB编码图三的积分
- ¥15 圆孔衍射光强随孔径变化
- ¥15 MacBook pro m3max上用vscode运行c语言没有反应
- ¥15 ESP-PROG配置错误,ALL ONES
- ¥15 结构功能耦合指标计算