Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按最近添加的顺序打印排序队列中最频繁的元素_Java_Sorting_Data Structures_Linked List_Queue - Fatal编程技术网

Java 按最近添加的顺序打印排序队列中最频繁的元素

Java 按最近添加的顺序打印排序队列中最频繁的元素,java,sorting,data-structures,linked-list,queue,Java,Sorting,Data Structures,Linked List,Queue,ListTopVisitedSites(sites,5)应返回以下输出: www.google.com | 4 www.aol.com | 3 www.microsoft.com | 3 www.amazon.com | 3 www.facebook.com | 3 我正在尝试打印前5个元素。如果多个元素的数量相同,则应按最近期(最近添加)排序。另外,我需要打印一个空数组,该数组的类型为string,没有值 我遗漏了哪个部分,或者编码不正确?所有方法及其参数应该保持不变,因

ListTopVisitedSites(sites,5)应返回以下输出:

www.google.com | 4  
www.aol.com | 3  
www.microsoft.com | 3  
www.amazon.com | 3  
www.facebook.com | 3  
我正在尝试打印前5个元素。如果多个元素的数量相同,则应按最近期(最近添加)排序。另外,我需要打印一个空数组,该数组的类型为string,没有值

我遗漏了哪个部分,或者编码不正确?所有方法及其参数应该保持不变,因为我应该保持时间复杂度为N2,空间复杂度为1

import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
class SiteStats {

    private String url;
    private int numVisits;


    public SiteStats(String url, int numVisits) {
        this.url = url;
        this.numVisits = numVisits;
    }


    public int getNumVisits() {
        return this.numVisits;
    }

    public String getUrl() {
        return this.url;
    }

    public void setNumVisits(int updatedNumVisits) {
        this.numVisits = updatedNumVisits;
    }

    public String toString() {
        return this.url + " | " + this.numVisits;
    }

}

public class PartBSolution {

    private static Queue<SiteStats> sites = new LinkedList<SiteStats>();



    public static void listTopVisitedSites(Queue<SiteStats> sites, int n) {

        sortQueue(sites);

        while(sites.isEmpty()== false)
        {
            System.out.println(sites.peek() + " ");
            sites.poll();
        }

    }
    public static void insertMaxToRear(Queue<SiteStats> sites,
                                       int max_index)
    {
        SiteStats max_value = null;
        int s = sites.size();
        for (int i = 0; i < s; i++)
        {
            SiteStats current = sites.peek();
            sites.poll();
            if (i != max_index)
                sites.add(current);
            else
                max_value = current;
        }
        sites.add(max_value);
    }

    public static void sortQueue(Queue<SiteStats> sites)
    {
        for(int i = 1; i <= sites.size(); i++)
        {
            int max_index = maxIndex(sites,sites.size() - i);
            insertMaxToRear(sites, max_index);
        }
    }

    public static int maxIndex(Queue<SiteStats> sites,
                               int sortIndex)
    {
        int max_index = -1;
        int max_value = 0;
        int s = sites.size();
        for (int i = 0; i < s; i++)
        {
            SiteStats current = sites.peek();

            sites.poll();
            if (current.getNumVisits() >= max_value && i <= sortIndex)
            {
                max_index = i;
                max_value = current.getNumVisits();
            }
            sites.add(current);
        }
        return max_index;
    }


    public static void updateCount(String url) {
        boolean flag=false;
        int size2=sites.size();
        for(int i = 0; i < size2 ; i++)
        {
            SiteStats temp=sites.peek();
            sites.poll();
            if(temp.getUrl().equals(url))
            {
                temp.setNumVisits(temp.getNumVisits()+1);
                flag=true;
                sites.add(temp);
                break;
            }
            sites.add(temp);
        }
        if(!flag)
            sites.add(new SiteStats(url,1));

    }

    public static void main(String[] args) {
        String[] visitedSites = { "www.google.com", "www.google.com", "www.facebook.com", "www.aol.com", "www.google.com", "www.youtube.com",
                "www.facebook.com", "www.aol.com", "www.facebook.com", "www.google.com", "www.microsoft.com", "www.9gag.com", "www.netflix.com",
                "www.netflix.com", "www.9gag.com", "www.microsoft.com", "www.amazon.com", "www.amazon.com", "www.uber.com", "www.amazon.com",
                "www.microsoft.com", "www.aol.com" };

        for (String url : visitedSites) {
            updateCount(url);
        }
        listTopVisitedSites(sites, 5);

    }

}


/**
www.google.com | 4
www.aol.com | 3
www.microsoft.com | 3
www.amazon.com | 3
www.facebook.com | 3
*/
import java.util.LinkedList;
导入java.util.List;
导入java.util.Queue;
类SiteStats{
私有字符串url;
私人国际博物馆;
公共站点统计信息(字符串url,int numVisits){
this.url=url;
this.numVisits=numVisits;
}
public int getNumVisits(){
返回此.numVisits;
}
公共字符串getUrl(){
返回this.url;
}
公共void setNumVisits(int updatedNumVisits){
this.numVisits=更新的numVisits;
}
公共字符串toString(){
返回this.url+“|”+this.numVisits;
}
}
公共类partb解决方案{
私有静态队列站点=新建LinkedList();
公共静态无效列表访问站点(队列站点,int n){
sortQueue(站点);
while(sites.isEmpty()==false)
{
System.out.println(sites.peek()+);
sites.poll();
}
}
公共静态void insertMaxToRear(队列站点,
int max_索引)
{
SiteStats最大值=null;
int s=sites.size();
对于(int i=0;i对于(int i=1;i=max_值&&i传递到
listTopVisitedSites(sites,5)的参数
n
不再使用,因此不能期望它只列出传递到
listTopVisitedSites(sites,5)的参数
n
不再使用,因此您不能期望它只列出您没有为listTopVisitedSites的参数n编写逻辑的5个

。请查找更新的

   public static void listTopVisitedSites(Queue<SiteStats> sites, int n) {
        sortQueue(sites);
        int iterate = 1;
        while (sites.isEmpty() == false && iterate <= n) {
            System.out.println(sites.peek() + " ");
            sites.poll();
            iterate++;
        }

    }
公共静态无效列表访问站点(队列站点,int n){
sortQueue(站点);
int迭代=1;

而(sites.isEmpty()==false&&iterate您没有为listTopVisitedSites的参数n编写逻辑。请查找更新的逻辑

   public static void listTopVisitedSites(Queue<SiteStats> sites, int n) {
        sortQueue(sites);
        int iterate = 1;
        while (sites.isEmpty() == false && iterate <= n) {
            System.out.println(sites.peek() + " ");
            sites.poll();
            iterate++;
        }

    }
公共静态无效列表访问站点(队列站点,int n){
sortQueue(站点);
int迭代=1;

而(sites.isEmpty()==false&&iterate什么不起作用?它正在打印所有元素,而不是我上面提到的5个。什么不起作用?它正在打印所有元素,而不是我上面提到的5个。是的。这是起作用的。但是,输出应该按以下顺序返回元素:Google、AOL、Microsoft、Amazon和Facebo好的。这是因为如果有相同数量的元素。它们应该按最近期(最近添加)排序。因此,在这种情况下,Microsoft需要在Facebook之前列在Amazon之前。是的。这是可行的。但是,输出应按以下顺序返回元素:Google、AOL、Microsoft、Amazon和Facebook。这是因为如果有共享相同数量的元素,则应按最近度排序-(最近添加).因此,在本例中,Microsoft需要在Facebook之前在Amazon之前列出。我根据上述建议对其进行了修改。但是,由于最后4个元素的出现次数相同,因此顺序必须为:Google、Aol、Facebook、Amazon和Microsoft。我根据上述建议对其进行了修改。但是,由于最后4个元素的出现次数相同如果发生,顺序应该是:谷歌、美国在线、Facebook、亚马逊和微软。