当前位置: 首页 > news >正文

[leetcode top100] 0924 找到数组中消失的数,合并二叉树,比特位计数,汉明距离

目录

448. 找到所有数组中消失的数字 - 力扣(LeetCode)

617. 合并二叉树 - 力扣(LeetCode)

338. 比特位计数 - 力扣(LeetCode)

461. 汉明距离 - 力扣(LeetCode)


 

448. 找到所有数组中消失的数字 - 力扣(LeetCode)

 思路:原地修改,数组中的元素的范围应该是[1,n],遍历每一个元素,找到他们原本的下标,加上n,所有的元素的值都是大于n的,缺失的元素的值都是小于n的。

class Solution:
    def findDisappearedNumbers(self, nums: List[int]) -> List[int]:
        n = len(nums)
        for num in nums:
            idx = (num-1) % n
            nums[idx] += n
        ret = [i+1 for i,num in enumerate(nums) if num <= n]
        return ret

class Solution {
public:
    vector<int> findDisappearedNumbers(vector<int>& nums) {
        int n = nums.size();
        for (auto& num:nums){
            int idx = (num-1) % n;
            nums[idx] += n;
        }
        vector<int> ret;
        for (int i = 0;i < n;i++){
            if (nums[i] <= n) ret.push_back(i+1);
        }
        return ret;
    
    }
};

617. 合并二叉树 - 力扣(LeetCode)

 思路:可以使用深度优先搜索合并两个二叉树。从根节点开始同时遍历两个二叉树,并将对应的节点进行合并。两个二叉树的对应节点可能存在以下三种情况,对于每种情况使用不同的合并方式。如果两个二叉树的对应节点都为空,则合并后的二叉树的对应节点也为空;如果两个二叉树的对应节点只有一个为空,则合并后的二叉树的对应节点为其中的非空节点;如果两个二叉树的对应节点都不为空,则合并后的二叉树的对应节点的值为两个二叉树的对应节点的值之和,此时需要显性合并两个节点。
使用DFS,(python and  c++)

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]:
        if not root1:return root2
        if not root2:return root1
        merged = TreeNode(root1.val + root2.val)
        merged.left = self.mergeTrees(root1.left,root2.left)
        merged.right = self.mergeTrees(root1.right,root2.right)
        return merged

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
        if (root1 == nullptr) return root2;
        if (root2 == nullptr) return root1;
        TreeNode* merged = new TreeNode(root1->val +root2->val);
        merged->left = mergeTrees(root1->left,root2->left);
        merged->right = mergeTrees(root1->right,root2->right);
        return merged;
    }
};

338. 比特位计数 - 力扣(LeetCode)

思考:这道题需要计算从 0 到 n 的每个整数的二进制表示中的 1 的数目。

 每个int 型的数都可以用 32 位二进制数表示,只要遍历其二进制表示的每一位即可得到 1 的数目。按位与操作。

 

class Solution:
    def countBits(self, n: int) -> List[int]:
        ret = [self.count(i) for i in range(n+1)]
        return ret

    def count(self,n):
        count = 0
        while n:
            n &= (n-1)
            count += 1
        return count


class Solution {
public:
    int count_ones(int n){
        //计算1的数量
        int count = 0;
        while (n){
            n &= (n-1);
            count++;
        }
        return count;
    }

    vector<int> countBits(int n) {
        vector<int> res(n+1);
        //这种方式也可以
        for (int i = 0;i <= n;i++){
            res[i] = count_ones(i);
        }
        return res;
    }
};

461. 汉明距离 - 力扣(LeetCode)

class Solution:
    def hammingDistance(self, x: int, y: int) -> int:
        res = 0
        tmp = x^y
        while tmp:
            tmp &= (tmp-1)
            res += 1
        return res
class Solution {
public:
    int hammingDistance(int x, int y) {
        int res = 0;
        int tmp = x^y;
        while (tmp){
            tmp &= (tmp-1);
            res++;
        }
        return res;
  
    }
};

相关文章:

  • Java · 图书管理系统代码练习 · 抽象类 · 封装 · 继承 · 多态 · 接口
  • C语言 文件包含和条件编译
  • Vue入门【三】-- 详解computed计算属性
  • 线程池概念2
  • 一键部署设计稿至线上 —— D2C国产神器
  • 死锁检测实现
  • jsp杂草信息分类系统myeclipse开发sql数据库BS模式java编程网页结构serlvet技术mvc框架
  • 2022牛客多校(八)
  • jenkins 持续集成/项目部署
  • 彻底掌握Makefile(二)
  • 【华为机试真题Java】取近似值
  • 如何预备ERP中的事务数据?
  • 360 度评估中的最佳问题推荐
  • 谷粒商城超详细笔记+踩坑(1)——项目环境搭建、人人开源快速开发和代码生成器
  • 性价比首选,百元旗舰级骨传导耳机——南卡Runner CC3实战评测
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【翻译】babel对TC39装饰器草案的实现
  • DOM的那些事
  • Druid 在有赞的实践
  • IDEA 插件开发入门教程
  • iOS 系统授权开发
  • js作用域和this的理解
  • SAP云平台里Global Account和Sub Account的关系
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • tweak 支持第三方库
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • Vue 重置组件到初始状态
  • Windows Containers 大冒险: 容器网络
  • 安装python包到指定虚拟环境
  • 反思总结然后整装待发
  • 浮现式设计
  • 日剧·日综资源集合(建议收藏)
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 物联网链路协议
  • 小程序01:wepy框架整合iview webapp UI
  • 06-01 点餐小程序前台界面搭建
  • Java总结 - String - 这篇请使劲喷我
  • 大数据全解:定义、价值及挑战
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (2)(2.10) LTM telemetry
  • (Matlab)使用竞争神经网络实现数据聚类
  • (NSDate) 时间 (time )比较
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (一)kafka实战——kafka源码编译启动
  • (转)Unity3DUnity3D在android下调试
  • (转)甲方乙方——赵民谈找工作
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .libPaths()设置包加载目录