终于第十天了,好巧不巧三道简单题hhh
TODO:
- 注意 :和为s的两个数字可以用双指针的方法
- 重新做扑克牌中的顺子
- 熟练使用递归
剑指 Offer 57. 和为s的两个数字(简单)
美团面试就考了这道题,做的很垃圾。刚做了一下看了时间效率...oh 突然知道为什么不行了...
这题可以双指针啊!!💔面试用的unordered_map,刚做的那遍用的set
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int i = 0, j = nums.size()-1;
while(i < j){
int temp = nums[i] + nums[j];
if(temp == target) return {nums[i],nums[j]};
else if(temp < target){i++;}
else {
j--;
}
}
return {};
}
};
剑指 Offer 61. 扑克牌中的顺子(简单)
emmm一不小心看了题解。5 张牌是顺子的 充分条件①除大小王外,所有牌 无重复(因为大小王可以成为任何牌 ;②设此 5 张牌中最大的牌为max ,最小的牌为 min (大小王除外),则需满足:
max - min < 5,一旦大于5,如1,0,0,0,6
即使剩下的都是大小王也不够补
class Solution {
public:
bool isStraight(vector<int>& nums) {
vector<int> map(14); //构建哈希集合
int minValue = 15, maxValue = 0;
for(int n : nums)
{
if(map[n] >= 1) return false; //重复数字,出错
if(n == 0) continue; //遇到大小王,跳过
minValue = min(minValue, n);
maxValue = max(maxValue, n);
++map[n];
}
return maxValue - minValue <= 4;
}
};
剑指 Offer 27. 二叉树的镜像(简单)
这种题一看就开始害怕,不过得先整理清楚思路。应该是一个简单递归,虽然做出来了,但是做了还挺久...
class Solution {
public:
TreeNode* newroot;
TreeNode* mirrorTree(TreeNode* root) {
if(root == nullptr) return nullptr;
newroot = Treebuild(root,newroot);
return newroot;
}
TreeNode* Treebuild(TreeNode* root, TreeNode* newroot){
if(root == nullptr) return nullptr;
newroot = new TreeNode(root->val);
newroot->left = root->right != nullptr?Treebuild(root->right,newroot->right):nullptr;
newroot->right = root->left != nullptr?Treebuild(root->left,newroot->left):nullptr;
return newroot;
}
};
效果似乎也一般:
image.png
就很玄学,注释了一句后就100%,总觉得不应该影响效率才是,毕竟都执行不到那一句
image.png
题解没有新建一棵树,就是在原来的树上进行镜像:
剑指 Offer 27. 二叉树的镜像(递归 / 辅助栈,清晰图解)(https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-lcof/solution/mian-shi-ti-27-er-cha-shu-de-jing-xiang-di-gui-fu-/)
网友评论