我编写了两种方法的代码,以找出LeetCode上字符串中的第一个唯一字符.
问题陈述: 给定一个字符串,找到其中的第一个非重复字符并返回它的索引.如果它不存在,则返回-1.
样本测试案例:
s ="leetcode"返回0.
s ="loveleetcode",返回2.
方法1(O(n))(如果我错了,请纠正我):
class Solution {
public int firstUniqChar(String s) {
HashMap<Character,Integer> charHash = new HashMap<>();
int res = -1;
for (int i = 0; i < s.length(); i++) {
Integer count = charHash.get(s.charAt(i));
if (count == null){
charHash.put(s.charAt(i),1);
}
else {
charHash.put(s.charAt(i),count + 1);
}
}
for (int i = 0; i < s.length(); i++) {
if (charHash.get(s.charAt(i)) == 1) {
res = i;
break;
}
}
return res;
}
}
Run Code Online (Sandbox Code Playgroud)
方法2(O(n ^ …
我的服务中有方法,在其中我试图返回User对象的Observable。这是我的代码-
constructor(private firestore: AngularFirestore,
private db: AngularFireDatabase) { }
/**
* get user with given email, if not return null
*
* @param email email to fetch
*/
getUserByEmail(email: string): Observable<User> {
var user: User;
let userRef = this.firestore.collection("users").ref.where('email', '==', email);
userRef.get().then(res => res.forEach(userDoc => {
user = userDoc[0].data() as User; // since email IDs are unique, I want the 0th element.
user.id = userDoc[0].id;
console.log(user); // has the data
// return user; // doesn't work, not the right thing …Run Code Online (Sandbox Code Playgroud) 为了在未加权图上实现Dijkstra的最短路径算法以使其在线性时间内运行,要使用的数据结构为:
我发现以下答案:
队列,因为我们可以使用广度优先搜索(BFS)算法在未加权图中找到单个源最短路径,该算法使用“队列”数据结构,时间为O(m + n)(即相对于顶点和边的数量呈线性) )
要在线性时间内实现它,就需要一个最小堆,因为如果我们在此处删除一个最小堆中的节点,则将不需要任何时间进行调整,因为所有r具有相同的权重,因此删除一个节点需要O(1)。 n-1个节点,它将是O(n)。
有人可以解释哪个是正确的答案吗?