数组中的第K个最大元素(medium)

题解用了快排和堆排,我直接用了sort函数
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
sort(nums.begin(),nums.end(),greater<int>());
return nums[k - 1];
}
};
未解
第一题是给一个字符串,判断这个字符串是不是一个合法的64bits无符号整数
第二题是给n个有序链表,找出在n个链表中出现在至少m个链表中的数
给一个入栈的序列中间可以随便出栈,求一共有多少种出栈序列的可能(e.g. [1,2,3] -> 5)
第二道是给出两两认识的人要求给所有人分组
获取Excel的StringHeader,就是输入1输出A,输入26输出Z,输入27输出AA这种
一个整数数组(可能有负数),求两个没有交集的连续区间内所有数字的最大的和
从一个超级大的文本中随机取出k行,怎么取?
寻找一颗二叉树最后一层最左边的节点(DFS BFS)
1, 输入年月日,输出该天为该年的第几天,
2, 输入一个数组和一个整数,问这个数组相邻元素之间相加减,可否得到目标整数
- 给一个句子,按单词做反转(比如l love MS 翻转为 MS love I)
2, 旋转的有序数组,找指定的字符(只用返回能否)
3, 给定一个数组,再给一个目标值,问是否有两个值的和为目标值(只用返回能否)
给定一个整数数组,求出该整数数组能拼接得到的最大整数
题目是把中文数字转换成double值,比如“二零一二” -> 2012
“三十万七百亿四千零八十一千零五十五” -> 30070040081035
1 循环队列 2. IPv4 + String To Int 3. 有效excel表格
二维平面上有若干个点,求出所有欧氏距离和曼哈顿距离相等的节点对数。 - 给定一个无序数组,找到三个数使得乘积最大
- 给一篇文章,找出词频最大的十个单词
- 计算器只支持-1操作和*2操作,初始值x和目标值y,最少通过几步可以从x到y
- 给定一个链表A,要求在A的第i到j位置中间插入B链表
- 给定一个二维数组matrix,每一步的代价是两个位置数字的差的绝对值,求从左上角到右下角的最小代价
环形数组是否存在循环
无重复字符串的排列组合
有重复字符串的排列组合
顺时针旋转矩阵
LRU 缓存
二叉树中的最大路径和
class Solution {
private:
int ans=INT_MIN;
public:
int maxNodeGain(TreeNode* root)
{
if(root==nullptr)
return 0;
int left = max(0,maxNodeGain(root->left));
int right = max(0,maxNodeGain(root->right));
int maxNodePath = left + right + root->val;
ans = max(ans,maxNodePath);
return max(left,right)+root->val;
}
int maxPathSum(TreeNode* root) {
maxNodeGain(root);
return ans;
}
};
二分查找
判断二分图
数组中重复的数据
礼物的最大价值
全排列II
设计循环队列
重建二叉树
class Solution {
private:
unordered_map<int, int> index;
public:
TreeNode* myBuildTree(const vector<int>& preorder, const vector<int>& inorder, int preorder_left, int preorder_right, int inorder_left, int inorder_right) {
if (preorder_left > preorder_right) {
return nullptr;
}
// 前序遍历中的第一个节点就是根节点
int preorder_root = preorder_left;
// 在中序遍历中定位根节点
int inorder_root = index[preorder[preorder_root]];
// 先把根节点建立出来
TreeNode* root = new TreeNode(preorder[preorder_root]);
// 得到左子树中的节点数目
int size_left_subtree = inorder_root - inorder_left;
// 递归地构造左子树,并连接到根节点
// 先序遍历中「从 左边界+1 开始的 size_left_subtree」个元素就对应了中序遍历中「从 左边界 开始到 根节点定位-1」的元素
root->left = myBuildTree(preorder, inorder, preorder_left + 1, preorder_left + size_left_subtree, inorder_left, inorder_root - 1);
// 递归地构造右子树,并连接到根节点
// 先序遍历中「从 左边界+1+左子树节点数目 开始到 右边界」的元素就对应了中序遍历中「从 根节点定位+1 到 右边界」的元素
root->right = myBuildTree(preorder, inorder, preorder_left + size_left_subtree + 1, preorder_right, inorder_root + 1, inorder_right);
return root;
}
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
int n = preorder.size();
// 构造哈希映射,帮助我们快速定位根节点
for (int i = 0; i < n; ++i) {
index[inorder[i]] = i;
}
return myBuildTree(preorder, inorder, 0, n - 1, 0, n - 1);
}
};
二叉树的直径
把数字翻译成字符串
最长回文子串
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Solution {
public:
string longestPalindrome(string s) {
int n = s.size();
if (n < 2) {
return s;
}
int maxLen = 1;
int begin = 0;
// dp[i][j] 表示 s[i..j] 是否是回文串
vector<vector<int>> dp(n, vector<int>(n));
// 初始化:所有长度为 1 的子串都是回文串
for (int i = 0; i < n; i++

本文详述了多个数据结构和算法问题,包括数组中的第K个最大元素、二分查找、二叉树的最大路径和、LRU缓存等。还涉及链表操作、数组操作、字符串处理、数独判断等多个编程挑战,是准备面试的宝贵资源。
最低0.47元/天 解锁文章
1608

被折叠的 条评论
为什么被折叠?



