博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Zuora在线测试题解之Three Page Path
阅读量:4180 次
发布时间:2019-05-26

本文共 4494 字,大约阅读时间需要 14 分钟。

题目记不清楚了,大概是给出用户访问页面的记录(user, page),要求给出最经常被访问的前M个路径,每个路径至少包含n个页面。

定义类如下,测试通过。

1. 原始数据

package com.zuora.interview.path3page;public class UserPage {	private String user;	private String page;	public UserPage() {		// TODO Auto-generated constructor stub	}	public UserPage(String user, String page) {		super();		this.user = user;		this.page = page;	}	public String getUser() {		return user;	}	public void setUser(String user) {		this.user = user;	}	public String getPage() {		return page;	}	public void setPage(String page) {		this.page = page;	}	/**	 * @param args	 */	public static void main(String[] args) {		// TODO Auto-generated method stub	}}

2. 中间处理数据

package com.zuora.interview.path3page;public class UserPath {	private String user;	private String path;	public UserPath() {		// TODO Auto-generated constructor stub	}	public UserPath(String user, String path) {		super();		this.user = user;		this.path = path;	}	public String getUser() {		return user;	}	public void setUser(String user) {		this.user = user;	}	public String getPath() {		return path;	}	public void setPath(String path) {		this.path = path;	}	/**	 * @param args	 */	public static void main(String[] args) {		// TODO Auto-generated method stub	}}

3.处理后的数据

package com.zuora.interview.path3page;public class PathCount {	private String path;	private int count;	public PathCount() {		// TODO Auto-generated constructor stub	}	public PathCount(String path, int count) {		super();		this.path = path;		this.count = count;	}	public String getPath() {		return path;	}	public void setPath(String path) {		this.path = path;	}	public int getCount() {		return count;	}	public void setCount(int count) {		this.count = count;	}	/**	 * @param args	 */	public static void main(String[] args) {		// TODO Auto-generated method stub	}}

4.服务调用逻辑

package com.zuora.interview.path3page;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;public class Solution {	private List
userPages = new ArrayList
(); private List
userPaths = new ArrayList
(); private List
pathCounts = new ArrayList
(); public void initUserPages(){ userPages.add(new UserPage("U1", "/")); userPages.add(new UserPage("U1", "subscibers")); userPages.add(new UserPage("U2", "/")); userPages.add(new UserPage("U2", "subscibers")); userPages.add(new UserPage("U1", "filter")); userPages.add(new UserPage("U1", "export")); userPages.add(new UserPage("U2", "filter")); userPages.add(new UserPage("U2", "export")); userPages.add(new UserPage("U3", "/")); userPages.add(new UserPage("U3", "catalog")); userPages.add(new UserPage("U3", "edit")); } public void parseUserPage(){ for(UserPage up : userPages){ setUserPath(up); } } private void setUserPath(UserPage userPage){ if(userPage == null) return; boolean isUserExist = false; for(UserPath up : userPaths){ if(userPage.getUser().equals(up.getUser())){ isUserExist = true; up.setPath(up.getPath() + "->" + userPage.getPage()); break; } } if(!isUserExist){ userPaths.add(new UserPath(userPage.getUser(), userPage.getPage())); } } public void setPathNCount(int n){ if(n <= 0) return; for(UserPath up : userPaths){ String[] paths = up.getPath().split("->"); if(paths.length > n){ setPathNCount(paths, n); } } } private void setPathNCount(String[] path, int n){ if(n <= 0 || path == null || path.length < n) return; StringBuilder sb = new StringBuilder(); for(int i = 0; i <= path.length-n; i++){ for(int j = i; j < n+i; j++){ if(sb.length() == 0) sb.append(path[j]); else sb.append("->" + path[j]); } boolean isPathExist = false; for(PathCount pc : pathCounts){ if(sb.toString().equals(pc.getPath())){ isPathExist = true; pc.setCount(pc.getCount()+1); break; } } if(!isPathExist) pathCounts.add(new PathCount(sb.toString(), 1)); sb.delete(0, sb.length()); } } public void sortPathCounts(){ Collections.sort(pathCounts, new Comparator
(){ public int compare(PathCount o1, PathCount o2){ if(o1.getCount() > o2.getCount()) return 1; return 0; } }); } public List
getTopXPath(int x){ if (x < 0 || x > pathCounts.size()) return null; sortPathCounts(); List
topX = new ArrayList
(); for(int i = 0; i < x; i++){ topX.add(pathCounts.get(i)); } return topX; } public void print(List
pc){ } /** * @param args */ public static void main(String[] args) { Solution sl = new Solution(); sl.initUserPages(); sl.parseUserPage(); sl.setPathNCount(3); List
pc = sl.getTopXPath(2); sl.print(pc); }}
祝后续的同学们好运!

转载地址:http://mnlai.baihongyu.com/

你可能感兴趣的文章
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:SQL Server 未返回响应。连接已关闭。
查看>>
windows下mysql数据备份bat文件
查看>>
windows下oracle数据备份bat文件
查看>>
windows下sqlserver数据库备份
查看>>
SpringBoot之打包成war包部署到tomcat
查看>>
bat方式启动java jar
查看>>
windows下mysql 主主同步
查看>>
基于nginx实现web服务器的双机热备
查看>>
Linux 查看端口占用并杀掉
查看>>
bootstrap fileinput.js 文件上传 文件名称的问题
查看>>
下载时文件名的编码问题
查看>>
把文件夹的文件按时间排序
查看>>
instanceof和isInstance区别详解
查看>>
synchronized实现原理
查看>>
SpringBoot | 打成jar包部署项目
查看>>
原子操作类AtomicInteger
查看>>
windows下解决端口占用的情况
查看>>
SpringBoot | 以maven的方式启动项目
查看>>
SpringBoot | 如何配置静态资源的地址与访问路径
查看>>
SpringBoot | 加入shiro之后如何优雅的访问默认目录static下的静态资源
查看>>