Java 查找操作员的最低价格列表 Country code List=92445、445、966、92445、966、966、92 价目表=0.99,0.91,0.92,0.97,0.93,0.97,0.92,0.97,1.0 操作员列表=A、C、A、B、C、B、A、C、A
当用户输入国家代码时,我应该找到最低价格表和相应的操作员。 可以复制国家代码数据。这不是唯一的。e、 g.因为我们不知道countrycode:92属于哪个操作符,92可以存在于countrycode列表中的操作符A、B或C中 我已经写了下面的代码。但它有一个问题 问题:我可以对CountryCode进行排序,但是下面代码中的binarySearch无法相应地计算出最低价格列表。它总是给我随机值,这不是最低价格。对以下代码的改进将不胜感激Java 查找操作员的最低价格列表 Country code List=92445、445、966、92445、966、966、92 价目表=0.99,0.91,0.92,0.97,0.93,0.97,0.92,0.97,1.0 操作员列表=A、C、A、B、C、B、A、C、A,java,binary-search,comparator,Java,Binary Search,Comparator,当用户输入国家代码时,我应该找到最低价格表和相应的操作员。 可以复制国家代码数据。这不是唯一的。e、 g.因为我们不知道countrycode:92属于哪个操作符,92可以存在于countrycode列表中的操作符A、B或C中 我已经写了下面的代码。但它有一个问题 问题:我可以对CountryCode进行排序,但是下面代码中的binarySearch无法相应地计算出最低价格列表。它总是给我随机值,这不是最低价格。对以下代码的改进将不胜感激 class Dog implements Compara
class Dog implements Comparator<Dog>, Comparable<Dog>{
private int CountryCode;
private double Price;
private String Operator;
Dog(){
}
Dog( int c, double p, String o){
CountryCode= c;
Price= p;
Operator=o;
}
public int getCountryCode(){
return CountryCode;
}
public double getPrice(){
return Price;
}
public String getOperator(){
return Operator;
}
// Overriding the compareTo method
public int compareTo(Dog d){
return CountryCode- d.getCountryCode();
}
// Overriding the compare method to sort the age
public int compare(Dog d, Dog d1){
return d.CountryCode - d1.CountryCode;
}
}
public class Ser {
/**
* @param args
*/
public static void main(String[] args) {
// Takes a list o Dog objects
ArrayList <Dog> list1 = new ArrayList<Dog>();
list1.add(new Dog(92, 0.99 , "A"));
list1.add(new Dog(445, 0.91 , "C"));
list1.add(new Dog(445, 0.92 , "A"));
list1.add(new Dog(966, 0.97 , "B"));
list1.add(new Dog(92, 0.93 , "C"));
list1.add(new Dog(445, 0.97 , "B"));
list1.add(new Dog(966, 0.92, "A"));
list1.add(new Dog(966,0.97, "C"));
list1.add(new Dog(92,1.0, "A"));
// Sorts the array list using comparator
Collections.sort(list1, new Dog());
for(Dog a: list1)//printing the sorted list of ages
System.out.println(a.getCountryCode() +" : "+
a.getOperator()+" : "+ a.getPrice());
int index= Collections.binarySearch(list1, new Dog ( 92,null,null));
if (index>=0)
System.out.println( list1.get(index).getOperator()+ " " + list1.get(index).getPrice());
else
System.out.println("No operator is availible");
}}
类狗实现比较器,可比较{
私人国际编码;
私人双价;
私有字符串运算符;
狗(){
}
狗(内c,双p,字符串o){
CountryCode=c;
价格=p;
运算符=o;
}
public int getCountryCode(){
返回国家代码;
}
公开双价{
退货价格;
}
公共字符串getOperator(){
返回运算符;
}
//重写compareTo方法
公共内部比较(狗d){
返回CountryCode-d.getCountryCode();
}
//重写compare方法以对年龄进行排序
公共整数比较(狗d、狗d1){
返回d.CountryCode-d1.CountryCode;
}
}
公共类Ser{
/**
*@param args
*/
公共静态void main(字符串[]args){
//获取狗对象的列表
ArrayList list1=新的ArrayList();
列表1.添加(新狗(92,0.99,“A”);
列表1.添加(新狗(445,0.91,“C”);
列表1.添加(新狗(445,0.92,“A”);
列表1.添加(新狗(966,0.97,“B”);
列表1.添加(新狗(92,0.93,“C”);
列表1.添加(新狗(445,0.97,“B”);
列表1.添加(新狗(966,0.92,“A”);
列表1.添加(新狗(966,0.97,“C”);
列表1.添加(新狗(92,1.0,“A”);
//使用比较器对数组列表排序
Collections.sort(list1,newdog());
for(Dog a:list1)//打印已排序的年龄列表
System.out.println(a.getCountryCode()+“:”+
a、 getOperator()+”:“+a.getPrice());
int index=Collections.binarySearch(list1,newdog(92,null,null));
如果(索引>=0)
System.out.println(list1.get(index.getOperator()+“”+list1.get(index.getPrice());
其他的
System.out.println(“没有操作员可用”);
}}
您从未按价格对列表进行排序,因此您不应该期望得到最低价格
乍一看,列表是按照国家代码的顺序排序的
每个国家/地区代码内的价格顺序是随机的,取决于:
- 原始列表的未指定排序顺序
- 二进制搜索找到的第一个值具有正确的国家代码
- 使用Kent建议的预先构建的层次结构,对两个维度(国家/地区/价格)的数据进行排序,然后您可以快速提取所需的数据
- 将comparator更改为按国家/地区和价格排序,然后扫描列表(而不是二进制搜索),并返回具有正确国家/地区的第一个项目
- 将比较器更改为按国家和价格进行排序,然后使用二进制搜索搜索国家(二进制搜索将返回具有该国家的任何位置),然后向后扫描以查找最低价格
- 原始列表的未指定排序顺序
- 二进制搜索找到的第一个值具有正确的国家代码
- 使用Kent建议的预先构建的层次结构,对两个维度(国家/地区/价格)的数据进行排序,然后您可以快速提取所需的数据
- 将comparator更改为按国家/地区和价格排序,然后扫描列表(而不是二进制搜索),并返回具有正确国家/地区的第一个项目
- 将比较器更改为按国家和价格进行排序,然后使用二进制搜索搜索国家(二进制搜索将返回具有该国家的任何位置),然后向后扫描以查找最低价格
如果找到多条具有相同国家代码的狗,请以最低价格返回该狗。
我建议你改变你的列表设计
您可以有一个Map
键是countryCode
。当然,Map
或番石榴MultiMap
也可以
如果countrycode
实际上是国家,则地图上的条目不会超过300个
然后您可以保存该O(logn)
二进制搜索。并使用O(1)
获取相同国家代码的狗的列表/集合/树集
然后,如果没有排序,您可以按价格对收集的狗进行排序(O(nlogn)
)(您应该输入可比较的接口和方法)并获得第一只/最后一只狗。取决于您的排序顺序。您还可以对集合进行排序,以备以后使用。如果这只是一次性的工作,你甚至可以通过收集狗,以最低的价格得到狗<代码>O(n)
如果您想让运算符也进行排序,请将该信息写入i