我是靠谱客的博主 飘逸万宝路,最近开发中收集的这篇文章主要介绍LeetCode刷题笔记 一起愉快A题 (C++)(持续更新中)LeetCode 136. 只出现一次的数字,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
开始刷LeetCode题库了,既可以准备蓝桥杯,有可以多练习算法题,一起愉快A题呀
LeetCode 102. 二叉树的层序遍历
题目描述
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例
二叉树:[3,9,20,null,null,15,7],
3
/
9
20
/
15
7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
解题思路
- 创建辅助队列,依次遍历每一层节点并将下一层节点入队。
- 遍历的同时用一个向量存储数据。
- 每遍历完一层将存储该层的向量存储到二维向量中。
- 直到遍历完成返回最终统计数据。
AC
/**
* Definition for a binary tree node.
* struct TreeNode {
*
int val;
*
TreeNode *left;
*
TreeNode *right;
*
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode *root) {
vector<vector<int>> result;
queue<TreeNode *> tempQueue;
//辅助队列
if (root == nullptr) {
return result;
}
tempQueue.push(root);
TreeNode *tempNode = nullptr;
//存放队列首结点
while (!tempQueue.empty())
//队列不为空
{
int QueLength = tempQueue.size();
vector<int> level;
//存放此层的值
for (int i = 0; i < QueLength; i++) {
tempNode = tempQueue.front();
tempQueue.pop();
level.push_back(tempNode->val);
if (tempNode->left != nullptr)
tempQueue.push(tempNode->left);
if (tempNode->right != nullptr)
tempQueue.push(tempNode->right);
}
result.push_back(level);
}
return result;
}
};
LeetCode 136. 只出现一次的数字
题目描述
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
示例
输入: [2,2,1]
输出: 1
输入: [4,1,2,1,2]
输出: 4
解题思路
这个题目最简单的思路是多次遍历找出只出现一次的数,但是对于时间复杂度就会很高。
我们可以使用异或运算的性质:
- 任何数和0做异或,还是原来的数,即:
a ^ 0 = a
- 任何数和自身做异或,结果为0,即:
a ^ a = 0
- 异或满足交换律和结合律。
例如输入
[4,1,2,1,2]
,使用异或操作:4 ^ 1 ^ 2 ^ 1 ^ 2 = 4 ^ ( 1 ^ 1 ) ^ ( 2 ^ 2) = 4 ^ 0 ^ 0 = 4
AC
class Solution {
public:
int singleNumber(vector<int>& nums) {
int result = 0;
for(int i:nums)
result ^= i;
return result;
}
};
最后
以上就是飘逸万宝路为你收集整理的LeetCode刷题笔记 一起愉快A题 (C++)(持续更新中)LeetCode 136. 只出现一次的数字的全部内容,希望文章能够帮你解决LeetCode刷题笔记 一起愉快A题 (C++)(持续更新中)LeetCode 136. 只出现一次的数字所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复