Java 按最近添加的顺序打印排序队列中最频繁的元素
ListTopVisitedSites(sites,5)应返回以下输出: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,没有值 我遗漏了哪个部分,或者编码不正确?所有方法及其参数应该保持不变,因
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、亚马逊和微软。