每日OJ题_剑指offer数组篇
目录
剑指 Offer 39. 数组中出现次数超过一半的数字
代码解析1
代码解析2
剑指 Offer 05. 替换空格
代码解析
剑指 Offer 39. 数组中出现次数超过一半的数字
LCR 158. 库存管理 II - 力扣(LeetCode)
仓库管理员以数组 stock
形式记录商品库存表。stock[i]
表示商品 id
,可能存在重复。请返回库存表中数量大于 stock.length / 2
的商品 id
。
示例 1:
输入: stock = [6, 1, 3, 1, 1, 1] 输出: 1
限制:
1 <= stock.length <= 50000
- 给定数组为非空数组,且存在结果数字
class Solution {
public:
int inventoryManagement(vector<int>& stock) {
}
};
代码解析1
直接sort:
class Solution {
public:
int inventoryManagement(vector<int>& stock) {
sort(stock.begin(),stock.end());
return stock[stock.size()/2];
}
};
代码解析2
学了哈希表,后面比较容易想到的就是用哈希表,时间O(N),空间O(N/2)
还是没有达到进阶,我们现在学另一种解法:摩尔投票法,时间O(N),空间O(1)
可以理解成混战极限一换一,不同的两者一旦遇见就同归于尽,
最后活下来的值都是相同的,即要求的结果:
(这种方法一般人都想不到,理解就行,以后遇到就会了)
class Solution {
public:
int inventoryManagement(vector<int>& stock) {
int res = 0, count = 0;
//[1, 2, 3, 2, 2, 2, 5, 4, 2] //放个例子好理解
for(int i = 0; i < stock.size(); i++) // 遍历
{
if(count == 0)//count=0就更换候选人,投他一票
{
res = stock[i];
count++;
}
else // 开始记票
{
res == stock[i] ? count++ : count--;
}
}
return res;
}
};
剑指 Offer 05. 替换空格
LCR 122. 路径加密 - 力扣(LeetCode)
假定一段路径记作字符串 path
,其中以 ".
" 作为分隔符。现需将路径加密,加密方法为将 path
中的分隔符替换为空格 "
",请返回加密后的字符串。
示例 1:
输入:path = "a.aef.qerf.bb" 输出:"a aef qerf bb"
限制:
0 <= path.length <= 10000
class Solution {
public:
string pathEncryption(string path) {
}
};
代码解析
class Solution {
public:
string pathEncryption(string path) {
string str;
for (auto& c : path)
{
if (c == '.')
{
str += " ";
}
else
{
str.push_back(c);
}
}
return str;
}
};