位运算 剑指offer15 二进制中1的个数 搜索算法:55-II 平衡二叉树 数值的整数次方 39数组中出现次数超过一半的数字

news2024/9/27 21:23:22

在这里插入图片描述
可能会引起死循环的解法:
看最右边一位是不是1,然后将输入的整数右移一位,再判断最右边一位(即倒数第二位)是否为1,接着再右移,知道整数移动到0为止
这个解法,把整数右移一位和把整数除以2在数学上是等价的,但是不能换成除以2,因为除法的效率要比移位运算要低得多,实际编程中,尽可能用移位运算代替乘除法。
但是这个解法存在的问题是,输入一个负数,负数0x80000000右移一位的时候,并不是简单的把最高位的1移到第二位变成0x40000000,而是0xC00000000,因为移位前是一个负数,仍然要保证移位后是一个负数,因此移位后的最高位会设置为1,如果一直右移运算,那么最终这个数字就会变成0xFFFFFFFF而陷入死循环。

class Solution {
public:

    int hammingWeight(uint32_t n) {
        int result=0;
        while(n)
        {
           if(n&1) result++;//判断最右边一位是否为1 
           n=n>>1; //n右移一位
        }
        return result;
    }
};

常规解法:不引起死循环,就不能右移整数n。首先n和1做位运算,判断倒数第一位是否为1,然后1右移变成2即10,做位运算,判断倒数第二位是否为1,接着2再右移一位变成4即100,判断倒数第三位是否为1.
循环的次数:整数二进制的位数,32位的整数需要循环32次,f定义为unsigned int ,因此while(f) 循环32次,同时题目中输入也必须是长度为32的二进制串

class Solution {
public:

    int hammingWeight(uint32_t n) {
        int result=0;
        unsigned int f=1;
        while(f)
        {
           if(n&f) result++;//每次判断当前f在的1的位置是否为1 
           f=f<<1; //f左移一位
        }
        return result;
    }
};

把一个整数减去1,在和原整数进行位运算,会把该证书最右边的1变成0,有多少个1,进行多少次该操作

class Solution {
public:
//复杂度logn
    int hammingWeight(uint32_t n) {
        int result=0;
        while(n)
        {
            n&=n-1;
            result++;
        }
        return result;
    }
};

在这里插入图片描述

class Solution {
public:
    bool isBalanced(TreeNode* root) {
        return height(root)!=-1;
    }
private:
    int height(TreeNode* root)
    {
        if(!root) return 0;
        int left_dep=height(root->left);
        int right_dep=height(root->right);
        if(abs(left_dep-right_dep)>1||left_dep==-1||right_dep==-1) return -1;
        return max(left_dep,right_dep)+1;
    }
};

数组的整数次方

class Solution {
public:
    double myPow(double x, int n) {
        double result=1;
        int flag=n>0?1:0;
        long long N=abs(n);
        while(N)
        {
            if(N&1) result*=x;
            x=x*x;
            N=N>>1;
        }
        if(flag==0) result=1/result;
        return result;
    }
};

超过一半的次数

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        unordered_map<int,int> mp;
        int len=nums.size();
        for(int i=0;i<nums.size();i++)
        {
            mp[nums[i]]++;
            if(mp[nums[i]]>len/2) return nums[i];
        }
        return 1;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/809069.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mfc140u.dll丢失怎样修复?这三个方法的可以修复

最近遇到了mfc140u.dll丢失的问题&#xff0c;让我感到非常困扰。在使用某个软件时&#xff0c;突然弹出了一个错误提示&#xff0c;说是mfc140u.dll文件不存在&#xff0c;导致该软件无法正常运行。一开始我并不知道这个文件是什么&#xff0c;也不知道为什么会丢失。于是我开…

7.29训练总结

CodeForces - 1609E 这种使得整个串不包含子串’abc’的题目&#xff0c;发现可以用线段树维护 #include<bits/stdc.h> using namespace std; const int maxn1e55; #define lson now<<1 #define rson now<<1|1 struct seg {int a,b,c;int ab,bc,abc; }tr[m…

使用开源免费AI绘图工具神器-Stable Diffusion懒人整合包

使用开源免费AI绘图工具神器-Stable Diffusion懒人整合包 Stable Diffusion 是什么 Stable Diffusion (简称 SD) 是一款开源免费的以文生图的 AI 扩散模型&#xff0c;它和付费的 Midjourney 被人称为当下最好用的 AI 绘画工具。你在网上看到的绝大多数优秀 AI 图片作品&…

智能垃圾桶

1.树莓派3B引脚图 2. 原理图 3.舵机线图 搜了这个这么多3b的资料&#xff0c;自己只是想解决如何下程序和运行程序的博客&#xff0c;网上搜集的资料全是讲如何通过SSH或者网线连接树莓派&#xff0c;通过直接连接屏幕的教程较少。 棕 : GND 红 : VCC 黄&#xff1a; 信号线…

【Ubuntu系统18.04虚拟机ros下实现darknet_ros(YOLO V3)检测问题解析最全】

原本打算在搭载Ubuntu18.04的智能小车上面运行使用darknet_ros 包来进行yolov3的检测&#xff0c;但是运行过程中遇到了不少问题&#xff0c;从头到尾部的运行包括遇到的解决方法以及对应的文章一并列出&#xff0c;免得到处查找。 首先是在ROS下实现darknet_ros(YOLO V3)检测…

127.【SpringBoot 源码刨析D】

SpringBoot 源码刨析D (三)、SpringBoot 核心功能4.单元测试功能(1).JUnit5 的变化(2).JUnit5常用注解(3).断言&#xff08; assertions &#xff09;(3.1).简单断言(3.2).数组断言(3.3).组合断言(3.4).异常断言(3.5).超时断言(3.6).快速失败 (4).前置条件&#xff08; assumpt…

【小白必看】Python爬虫实战之批量下载女神图片并保存到本地

文章目录 前言运行结果部分图片1. 引入所需库2. 发送请求获取网页内容3. 解析网页内容并提取图片地址和名称4. 下载并保存图片完整代码关键代码讲解 结束语 前言 爬取网络上的图片是一种常见的需求&#xff0c;它可以帮助我们批量下载大量图片并进行后续处理。本文将介绍如何使…

如何选择台式还是便携式多参数水质检测仪呢

选择台式还是便携式多参数水质检测仪主要取决于具体的使用需求和场景。 1.便携式多参数水质检测仪适用于需要在不同地点进行水质检测的情况&#xff0c;例如户外采样、实地调查等。它具有小巧轻便的特点&#xff0c;方便携带和操作&#xff0c;适合需要频繁移动或需要灵活使用的…

深入解析Linux进程内存:VSS、RSS、PSS、USS及查看方式

VSS 虚拟耗用内存大小&#xff0c;是进程可以访问的所有虚拟内存的总量&#xff0c;包括进程独自占用的物理内存、和其他进程共享的内存、分配但未使用的内存。 RSS 驻留内存大小&#xff0c;是进程当前实际占用的物理内存大小&#xff0c;包括进程独自占用的物理内存、和其…

bootstrap入门到精通

官网&#xff1a;列表组 - Bootstrap框架 (bootstrapdoc.com) 菜鸟教程&#xff1a;Bootstrap 列表组 | 菜鸟教程 (runoob.com) 1.什么是bootstrap bootstrap是一个用于快速开发web应用程序和网站的前端框架。基于HTML、CSS和JavaScript封装 响应式 ElementUI 更适合用于企…

WIZnet W5500-EVB-Pico DHCP 配置教程(三)

DHCP协议介绍 什么是DHCP&#xff1f; 动态主机配置协议DHCP&#xff08;Dynamic Host Configuration Protocol&#xff09;是一种网络管理协议&#xff0c;用于集中对用户IP地址进行动态管理和配置。 DHCP于1993年10月成为标准协议&#xff0c;其前身是BOOTP协议。DHCP协议由R…

Spring源码(五)— 解析XML配置文件(一) bean标签解析流程

前面几章的内容已经介绍了BeanFactory创建前的准备工作&#xff0c;以及加载XML配置文件前的准备的步骤。本章会着重介绍解析XML的步骤。 registerBeanDefinitions 前几个方法不做过多的赘述&#xff0c;着重看registerBeanDefinitions方法中解析XML的步骤。 public int regi…

C++ 多进程学习总结

C多进程 进程间通信 消息队列 消息队列&#xff1a;提供一个种进程间发送/接收数据块&#xff08;常为结构体数据&#xff09;的方法。 函数接口 ftok()&#xff1a;获取消息队列键值msgget()&#xff1a;创建和访问消息队列msgsnd()&#xff1a;向消息队列发送数据msgrcv…

罗布乐思Roblox学习笔记

罗布乐思 文章目录 罗布乐思基本操作CFrameGUIModule script呼吸灯商店imageChangetag标签知识答题showTips 基本操作 缩放按shift 等比例缩放 ctrl 双向缩放 复制对象 ctrlD &#xff08;如果选择多个对象&#xff0c;按住ctrl&#xff09; F 聚焦 Workspace ​ Terrain…

看完这篇文章,你还会用再用AUTOMATIC1111 WebUI吗?

​说起 AUTOMATIC1111 的 Stable diffusion-wbui 这个项目&#xff0c;使用过Stable diffusion的人应该无人不知吧&#xff0c;网络上基本一边倒的在使用他家的项目&#xff0c;而且fork量和star量还不小&#xff1a; 但是AUTOMATIC1111 这个名字总给我一些不靠谱的感觉&#x…

【C++】多态、黑马程序员案例— —电脑组装、Visual Studio开发人员工具查看内部结构,cl /d1 reportSingleClassLayout

author&#xff1a;&Carlton tag&#xff1a;C topic&#xff1a;【C】多态、黑马程序员案例— —电脑组装、Visual Studio开发人员工具查看内部结构,cl /d1 reportSingleClassLayout website&#xff1a;黑马程序员C date&#xff1a;2023年7月24日 目录 纯虚函数、抽…

map的初始化、erase()、写入与写出

运行代码&#xff1a; //map的初始化、erase()、写入与写出 #include"std_lib_facilities.h"istream& operator>>(istream& is, map<string, int>&mm) {string ss"";int ii0;is >> ss;if(is>>ii)mm[ss] ii;return i…

【数据集】3小时尺度降水数据集-MSWEPV2

1 MSWEP V2 precipitation product 官网-MSWEP V2降水产品 参考

《向量数据库指南》:向量数据库Pinecone如何集成LangChain (一)

目录 LangChain中的检索增强 建立知识库 欢迎使用Pinecone和LangChain的集成指南。本文档涵盖了将高性能向量数据库Pinecone与基于大型语言模型(LLMs)构建应用程序的框架LangChain集成的步骤。 Pinecone使开发人员能够基于向量相似性搜索构建可扩展的实时推荐和搜索系统…

redis之Bitmap

位图数据结构其实并不是一个全新的玩意&#xff0c;我们可以简单的认为就是个数组&#xff0c;只是里面的内容只能为0或1而已(二进制位数组)。 GETBIT用于返回位数组在偏移量上的二进制位的值。值得我们注意的是&#xff0c;GETBIT的时间复杂度是O(1)。 GETBIT命令的执行过程如…