在我最近的一次采访中,我被要求实施ID分配器。
问题在于:
实现一个id分配器类,可以从0~size-1范围分配id。这个课有两种方法:
后续要求基本上是维护一个位数组以节省空间,但是这两种方法的运行时间必须优于线性。我坚持跟进,你们有什么想法吗?
connections
答案 0 :(得分:0)
如果您不必按顺序使用您的ID,则可以通过保留一组免费ID和一组使用过的ID来在固定时间内执行此操作。
<%@page import="java.sql.*"%>
<%!String driverName = "com.mysql.jdbc.Driver";%>
<%!String url = "jdbc:mysql://localhost:3306/sais2";%>
<%!String userid = "root";%>
<%!String password = "";%>
<%
String id = request.getParameter("id");
String fname = request.getParameter("fname");
String lname = request.getParameter("lname");
String email = request.getParameter("email");
if(id != null){
Connection con = null;
PreparedStatement ps = null;
int personID = Integer.parseInt(id);
try{
Class.forName(driverName);
con = DriverManager.getConnection(url, userid, password);
String sql = "UPDATE login SET lname = ?, fname = ?, email = ? WHERE id = " + id;
ps = con.prepareStatement(sql);
ps.setString(1, lname);
ps.setString(2, fname);
ps.setString(3, email);
int i = ps.executeUpdate();
if(i != 0){
out.print("Record Updated Successfully");
String redirectURL = "http://localhost:8080/SalesandInventory/System/profiletest.jsp";
response.sendRedirect(redirectURL);
}
else{
out.print("There is a problem in updating Record.");
}
}
catch(SQLException sql){
request.setAttribute("error", sql);
out.println(sql);
}
}
%>
这不像使用class IdAllocator():
def __init__(self, size):
self.free_ids = set(range(size))
self.used_ids = set()
def alloc(self):
try:
id = self.free_ids.pop()
self.used_ids.add(id)
return id
except KeyError:
raise Exception('No id available')
def release(self, id):
if id in self.used_ids:
self.used_ids.remove(id)
self.free_ids.add(id)
那样具有内存效率,但 O(1)的时间复杂度可能超过了它。