Day28-First Unique Number
问题描述:
You have a queue of integers, you need to retrieve the first unique integer in the queue.
Implement the FirstUnique class:
FirstUnique(int[] nums) Initializes the object with the numbers in the queue.
int showFirstUnique() returns the value of the first unique integer of the queue, and returns -1 if there is no such integer.
void add(int value) insert value to the queue.
这道题是这么个意思,要求实现一种数据结构,这种数据结构里面你猜怎么着,他要实现三种函数,哪三种函数呢,一是初始化函数这肯定有吧,要求将输入的数组初始化为一个数字队列,然后还要个添加数字的函数,就是这个队列不是定长的,他还要加数,最关键的是要显示当前这个数组里面唯一的数字并且当数组里面唯一数字很多的时候要显示第一个唯一的数字。
Example:
Example 1:
Input:
["FirstUnique","showFirstUnique","add","showFirstUnique","add","showFirstUnique","add","showFirstUnique"]
[[[2,3,5]],[],[5],[],[2],[],[3],[]]
Output:
[null,2,null,2,null,3,null,-1]
Explanation:
FirstUnique firstUnique = new FirstUnique([2,3,5]);
firstUnique.showFirstUnique(); // return 2
firstUnique.add(5); // the queue is now [2,3,5,5]
firstUnique.showFirstUnique(); // return 2
firstUnique.add(2); // the queue is now [2,3,5,5,2]
firstUnique.showFirstUnique(); // return 3
firstUnique.add(3); // the queue is now [2,3,5,5,2,3]
firstUnique.showFirstUnique(); // return -1
Example 2:
Input:
["FirstUnique","showFirstUnique","add","add","add","add","add","showFirstUnique"]
[[[7,7,7,7,7,7]],[],[7],[3],[3],[7],[17],[]]
Output:
[null,-1,null,null,null,null,null,17]
Explanation:
FirstUnique firstUnique = new FirstUnique([7,7,7,7,7,7]);
firstUnique.showFirstUnique(); // return -1
firstUnique.add(7); // the queue is now [7,7,7,7,7,7,7]
firstUnique.add(3); // the queue is now [7,7,7,7,7,7,7,3]
firstUnique.add(3); // the queue is now [7,7,7,7,7,7,7,3,3]
firstUnique.add(7); // the queue is now [7,7,7,7,7,7,7,3,3,7]
firstUnique.add(17); // the queue is now [7,7,7,7,7,7,7,3,3,7,17]
firstUnique.showFirstUnique(); // return 17
Example 3:
Input:
["FirstUnique","showFirstUnique","add","showFirstUnique"]
[[[809]],[],[809],[]]
Output:
[null,809,null,-1]
Explanation:
FirstUnique firstUnique = new FirstUnique([809]);
firstUnique.showFirstUnique(); // return 809
firstUnique.add(809); // the queue is now [809,809]
firstUnique.showFirstUnique(); // return -1
解法:
这个题是这个周的最后一道题了,好像每个周最后一道题都是新题,不过每周的新题好像都挺简单的,而且这个题的套路好像和前面有一道题差不多,都是要实现一种数据结构,前面那道题好像要设个辅助的栈来完成,这道题设置个辅助字典就可以完成,初始化的时候,我们遍历这个数组,然后设置辅助字典来表示这个数组中元素出现的次数,然后显示第一个唯一数函数被调用时,我们遍历字典,返回第一个值为1(就是出现一次的)key值,然后别忘了添加函数的时候不要光给队列添加,字典的值也要更新。
总的来说这道题还蛮简单的,没啥绕弯子的地方。也可能刷题稍微有点进步吧,好像30天快结束了,我前面还漏了四道题没做,这两天争取补上吧。最后说一句刷题真的有用,每天刷一道题就会一种解法也有用,坚持不懈,一定会看到效果。
class FirstUnique:
def __init__(self, nums: List[int]):
self.queue = nums
self.unique = {}#设置另一个队列用来存储每一个唯一的元素
for i in range(len(self.queue)):
if nums[i] not in self.unique:
self.unique[nums[i]] = 1
else:
self.unique[nums[i]] += 1
print(self.unique)
def showFirstUnique(self) -> int:
for i in self.unique:
if self.unique[i] == 1:
return i
return -1
def add(self, value: int) -> None:
self.queue.append(value)
if value in self.unique:
self.unique[value] += 1
else:
self.unique[value] = 1
# Your FirstUnique object will be instantiated and called as such:
# obj = FirstUnique(nums)
# param_1 = obj.showFirstUnique()
# obj.add(value)