索千 2023-04-20 18:40 采纳率: 74.4%
浏览 17

代码内存限制问题,该如何改?

此代码在提交平台超出了内存限制,怎样才能让代码在内存限制内?下面这段代码该如何改?

import java.util.Arrays;
import java.util.Scanner;

class Person implements Comparable<Person>{
    
    private String num ;
    private String name ;
    private String sex ;
    private String address ;
    public Person(String num, String name, String sex, String address) {
        super();
        this.num = num;
        this.name = name;
        this.sex = sex;
        this.address = address;
    }
    public String getNum() {
        return num;
    }
    public String getName() {
        return name;
    }
    public String getSex() {
        return sex;
    }
    public String getAddress() {
        return address;
    }
    @Override
    
    public int compareTo(Person o){
        
        if(this.num.compareTo(o.num) > 0){
            
            return 1 ;
        }else   if(this.num.compareTo(o.num) < 0){
            
            return -1 ;
        }else{
            
            return 0  ;
        }
        
    }
    @Override
    public String toString() {
        return  num + " " + name + " " + sex + " " + address;
    }
    
    
}

class Find{
    
    private  Person person[] ;
    private  int t ;
    
    public void setay(int n){
        
        person = new Person[n] ;
        t = 0 ;
    }
    
    public void getData(Person p){
        
        person[t] = p ;
        t++ ;
    }
    
    public void Look(String pr[]){
        
        Arrays.sort(person);
        for(int i=0; i<pr.length; i++){
            
            int index = binarySearch(person, pr[i]) ;
            if(index >= 0){
                
                System.out.println(person[index]);
            }else{
                
                System.out.println("找不到");
            }
        }
    }
    public int binarySearch(Person person[],String key ){
        
        int low = 0;
        int high = person.length - 1;
        int middle = 0 ;
        
        if(key.compareTo(person[low].getNum()) < 0 ||
                key.compareTo(person[high].getNum()) > 0||
                        low > high){
            
            return  -1 ;
        }
        while(low <= high){
            
            middle = (low + high) / 2 ;
            if(person[middle].getNum().compareTo(key) > 0){
                
                high = middle - 1 ;
            }else if(person[middle].getNum().compareTo(key) < 0){
                
                low = middle + 1 ;
            }else{
                
                return  middle ;
            }
        }
        
        return  -1 ;
        
    }
}
public class oj1893 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Scanner sc = new Scanner(System.in) ;
        int n = sc.nextInt();
        Find find = new Find() ;
        find.setay( n );
        for(int i=0; i<n; i++){
            
            Person pr = new Person(sc.next(),sc.next(),sc.next(),sc.next());
            find.getData( pr ) ;
        }
        while(sc.hasNext()){
            
            int m = sc.nextInt() ;
            if(m == 0)
                break ;
            String s[] = new String[m] ;
            
            for(int j=0; j<m; j++){
                
                s[j] = sc.next() ;
            }
            
            find.Look( s );
        }
        sc.close() ;
    }

}



img

img

  • 写回答

1条回答 默认 最新

  • nssnail 2023-04-20 20:10
    关注

    其实没必要排序再二分法查找,直接在list里面遍历计数就才On,你还定义了个find对象😂😂

    评论

报告相同问题?

问题事件

  • 创建了问题 4月20日

悬赏问题

  • ¥15 船舶旋回实验matlab
  • ¥30 SQL 数组,游标,递归覆盖原值
  • ¥15 为什么我的数据接收的那么慢呀有没有完整的 hal 库并 代码呀有的话能不能发我一份并且我用 printf 函数显示处理之后的数据,用 debug 就不能运行了呢
  • ¥15 有关于推荐系统jupyter
  • ¥20 gitlab 中文路径,无法下载
  • ¥15 用动态规划算法均分纸牌
  • ¥30 udp socket,bind 0.0.0.0 ,如何自动选取用户访问的服务器IP来回复数据
  • ¥15 关于树的路径求解问题
  • ¥15 yolo在训练时候出现File "D:\yolo\yolov5-7.0\train.py"line 638,in <module>
  • ¥30 戴尔inspiron独显直连