【算法集训暑期刷题营】8.10题---位运算

简介: 【算法集训暑期刷题营】8.10题---位运算

 👉引言


image.png

铭记于心
🎉✨🎉我唯一知道的,便是我一无所知🎉✨🎉


💖 ❄️我们的算法之路❄️💖


   众所周知,作为一名合格的程序员,算法 能力 是不可获缺的,并且在算法学习的过程中我们总是能感受到算法的✨魅力✨。

☀️🌟短短几行代码,凝聚无数前人智慧;一个普通循环,即是解题之眼🌟☀️

💝二分,💝贪心,💝并查集,💝二叉树,💝图论,💝深度优先搜索(dfs) ,💝宽度优先搜索(bfs) ,💝数论,💝动态规划等等, 路漫漫其修远兮,吾将上下而求索! 希望在此集训中与大家共同进步,有所收获!!!🎉🎉🎉

image.png


今日主题:位运算


 👉⭐️第一题💎


   ✨题目


      1.二进制间距

image.png


   ✨思路:


循环进行右移运算,遇到1则记录距离,取较大值,同时将计数器清零,N化成2进制然后拆成数组, 去除前面无用的0,保证第一个是0,然后遍历数组,如果是1,用当前位置减去标志位,求最大值,然后把当前位置复制为标志位输出即可


   ✨代码:


class Solution {
public:
    int binaryGap(int n) {
        int m=0,time=0;
        while(!(n&1)){n>>=1;}
        while(n){
            if(n&1){
                m=max(time,m);
                time=0;
            }
            time++;
            n>>=1;
        }
        return m;
    }
};

image.png


 👉⭐️第二题💎


   ✨题目


     2.位1的个数

image.png

解法一:循环右移,遇1计数
解法二:通过n&(n-1)消去最右位置的1


   ✨代码:


class Solution {
public:
    int hammingWeight(uint32_t n) {
        int num=0;
        while(n){
            if(n&1)num++;
            n>>=1;
        }return num;
    }
};
  • 解法二:
class Solution {
public:
    int hammingWeight(uint32_t n) {
        int t=0;
        while(n!=0)
        {
            n&=(n-1);
            t++;
        }
        return t;
    }
};

image.png


 👉⭐️第三题💎


   ✨题目


     3.只出现一次的数字

image.png


   ✨思路:


例如对于 1来说,1^1=0; 对于2来说,二进制表示为10,按位异或就是10^10,则可知等于0,也就是说两个相同的数异或得0, 所以将数组中的数全部异或一遍,两个相同的数便会为0,最终得到的即是出现一次的数


   ✨代码:


class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int n=0;
        for(int i=0;i<nums.size();i++){
            n^=nums[i];
        }return n;
    }
};

image.png


 👉⭐️第四题💎


   ✨题目


      4.K-th Not Divisible by n

image.png

给你三个整数a,b,c,请你找出三个整数x,y,z。使得满足x%y=a,y%z=b,z%x=c。可以保证一定存在答案

   

✨代码:


#include <bits/stdc++.h>
using namespace std;
int main() {
  int t;
  cin >> t;
  while (t--) {
    int n, k;
    cin >> n >> k;
    int need = (k - 1) / (n - 1);
    cout << k + need << endl;
  }
}

写在最后

相信大家对今天的集训内容的理解与以往已经有很大不同了吧,或许也感受到了算法的魅力,当然这是一定的,路漫

漫其修远兮,吾将上下而求索!伙伴们,明天见!


相关文章
|
23天前
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
34 1
|
4月前
|
算法
【算法】位运算算法——消失的两个数字(困难)
【算法】位运算算法——消失的两个数字(困难)
|
4月前
|
算法
【算法】位运算算法——只出现一次的数字Ⅱ
【算法】位运算算法——只出现一次的数字Ⅱ
|
4月前
|
算法
【算法】位运算算法——判断字符是否唯一
【算法】位运算算法——判断字符是否唯一
|
6月前
|
存储 算法 C语言
【数据结构与算法 刷题系列】合并两个有序链表
【数据结构与算法 刷题系列】合并两个有序链表
|
2月前
|
数据可视化 搜索推荐 Python
Leecode 刷题笔记之可视化六大排序算法:冒泡、快速、归并、插入、选择、桶排序
这篇文章是关于LeetCode刷题笔记,主要介绍了六大排序算法(冒泡、快速、归并、插入、选择、桶排序)的Python实现及其可视化过程。
21 0
|
4月前
|
算法
【算法】位运算算法——两整数之和
【算法】位运算算法——两整数之和
|
4月前
|
算法
【算法】位运算算法——丢失的数字
【算法】位运算算法——丢失的数字
|
4月前
|
算法
算法】位运算——常见位运算基础操作总结
算法】位运算——常见位运算基础操作总结
算法】位运算——常见位运算基础操作总结
|
4月前
【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)
【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)