我是靠谱客的博主 飘逸万宝路,最近开发中收集的这篇文章主要介绍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]
]

解题思路

  1. 创建辅助队列,依次遍历每一层节点并将下一层节点入队。
  2. 遍历的同时用一个向量存储数据。
  3. 每遍历完一层将存储该层的向量存储到二维向量中。
  4. 直到遍历完成返回最终统计数据。

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

解题思路

这个题目最简单的思路是多次遍历找出只出现一次的数,但是对于时间复杂度就会很高。

我们可以使用异或运算的性质:

  1. 任何数和0做异或,还是原来的数,即:a ^ 0 = a
  2. 任何数和自身做异或,结果为0,即:a ^ a = 0
  3. 异或满足交换律和结合律。

例如输入[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. 只出现一次的数字所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部