蜂信物联FastBee平台https://gitee.com/beecue/fastbee
阿里资料开源项目https://gitee.com/vip204888
百度低代码前端框架https://gitee.com/baidu/amis
OpenHarmony开源项目https://gitcode.com/openharmony
仓颉编程语言开放项目https://gitcode.com/Cangjie
-
030. 插入、删除和随机访问都是 O(1) 的容器
-
031. 最近最少使用缓存
-
032. 有效的变位词
-
033. 变位词组
-
034. 外星语言是否排序
-
035. 最小时间差
==========================================================================================
题目:
设计一个支持在平均 时间复杂度 O(1) 下,执行以下操作的数据结构:
- insert(val):当元素 val 不存在时返回 true ,并向集合中插入该项,否则返回 false 。
- remove(val):当元素 val 存在时返回 true ,并从集合中移除该项,否则返回 false 。
- getRandom:随机返回现有集合中的一项。每个元素应该有 相同的概率 被返回
示例:
输入: inputs = [“RandomizedSet”, “insert”, “remove”, “insert”, “getRandom”, “remove”, “insert”, “getRandom”]
[[], [1], [2], [2], [], [1], [2], []]
输出: [null, true, false, true, 2, true, false, 2]
解释:
RandomizedSet randomSet = new RandomizedSet(); // 初始化一个空的集合
randomSet.insert(1); // 向集合中插入 1 , 返回 true 表示 1 被成功地插入
randomSet.remove(2); // 返回 false,表示集合中不存在 2
randomSet.insert(2); // 向集合中插入 2 返回 true ,集合现在包含 [1,2]
randomSet.getRandom(); // getRandom 应随机返回 1 或 2
randomSet.remove(1); // 从集合中移除 1 返回 true 。集合现在包含 [2]
randomSet.insert(2); // 2 已在集合中,所以返回 false
randomSet.getRandom(); // 由于 2 是集合中唯一的数字,getRandom 总是返回 2
思路:
用 数组存储就可以满足随机访问集合中的任意一项getRandom
,用map
来访问元素的位置,不然直接用map
就可以了,
删除的时候直接将最后一个元素覆盖要删除的元素,这样就解决了数组删除后需要将数组后面元素迁移的复杂度。
class RandomizedSet {
public:
unordered_map<int,int> map;
vector num;
/** Initialize your data structure here. */
RandomizedSet() {
}
/** Inserts a value to the set. Returns true if the set did not already contain the specified element. */
bool insert(int val) {
if(map.count(val) != 0) return false;
map[val] = num.size();
num.push_back(val);
return true;
}
/** Removes a value from the set. Returns true if the set contained the specified element. */
bool remove(int val) {
if(map.count(val) == 0) return false;
map[num.back()] = map[val]; //将删除数的位置赋值给最后一个元素
num[map[val]] = num.back(); //将最后一个元素覆盖到删除数的位置
num.pop_back();
map.erase(val);
return true;
}
/** Get a random element from the set. */
int getRandom() {
return num[rand() % num.size()];
}
};
=============================================================================
这题做过题解了
===========================================================================
题目:
给定两个字符串 s 和 t ,编写一个函数来判断它们是不是一组变位词(字母异位词)。
注意:若 s 和 t 中每个字符出现的次数都相同且字符顺序不完全相同,则称 s 和 t 互为变位词(字母异位词)
示例:
输入: s = “anagram”, t = “nagaram”
输出: true
思路:
因为只有小写字母,直接用数组存储就可以了,也可以用map
要求变位词,即长度一样且不相等
然后记录s
的各个字符出现次数,去t
中遍历是否出现次数都一样
class Solution {
public:
bool isAnagram(string s, string t) {
if(s == t || s.length() != t.length()) return false;
//if过滤后都是长度想等的
vector vec(26);
for(char& c : s) {
vec[c - ‘a’]++;
}
for(char& c : t) {
if(–vec[c - ‘a’] < 0) {
return false;
}
}
return true;
}
};
=========================================================================
题目:
给定一个字符串数组 strs ,将 变位词 组合在一起。 可以按任意顺序返回结果列表。
注意:若两个字符串中每个字符出现的次数都相同,则称它们互为变位词。
示例:
输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]
思路:
排序每一个字符串,然后判断是否出现过,
出现过直接添加在该行后面
否则新增一行且添加在行首
class Solution {
public:
vector<vector> groupAnagrams(vector& strs) {
vector<vector> vec;
unordered_map<string, int> map;
总结
对于面试还是要好好准备的,尤其是有些问题还是很容易挖坑的,例如你为什么离开现在的公司(你当然不应该抱怨现在的公司有哪些不好的地方,更多的应该表明自己想要寻找更好的发展机会,自己的一些现实因素,比如对于我而言是现在应聘的公司离自己的家更近,又或者是自己工作到达了迷茫期,想跳出迷茫期等等)
Java面试精选题、架构实战文档
整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~
你的支持,我的动力;祝各位前程似锦,offer不断!
tring, int> map;
总结
对于面试还是要好好准备的,尤其是有些问题还是很容易挖坑的,例如你为什么离开现在的公司(你当然不应该抱怨现在的公司有哪些不好的地方,更多的应该表明自己想要寻找更好的发展机会,自己的一些现实因素,比如对于我而言是现在应聘的公司离自己的家更近,又或者是自己工作到达了迷茫期,想跳出迷茫期等等)
[外链图片转存中…(img-ZOtQRHuE-1725192875561)]
Java面试精选题、架构实战文档
整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~
你的支持,我的动力;祝各位前程似锦,offer不断!