万物的算法日记|第一天

这篇具有很好参考价值的文章主要介绍了万物的算法日记|第一天。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

笔者自述:

一直有一个声音也一直能听到身边的大佬经常说,要把算法学习搞好,一定要重视平时的算法学习,虽然每天也在学算法,但是感觉自己一直在假装努力表面功夫骗了自己,没有规划好自己的算法学习和总结,因为后半年也该找实习了,所以每日的算法题要进行恶补,勤能补拙,因此有了这一个算法日记系列;

必读: 大佬你好,感谢您的阅读,这篇文章是我的算法笔记,方便我每日回顾;
为了不耽误您的时间,我把本篇日记的考点方向和算法知识总结列出来,如果对您有需要要就进行阅读

也希望对您有帮助,和您一起通关算法!致谢

万物的算法日记|第一天,万物的算法日记,算法,数据结构

算法语言:java
题目来源:力扣–书本–初级算法,可以在力扣中搜索相关题名找到更多解法和大神方法
本文知识点:

  1. 随机数
    random.nextInt(j+1) 表示范围是从0-j
  2. 交换两个数的值
    交换两个数的值,使用异或操作,^= 效率更高,通过三次的异或操作,可以交换数组中的两个值,在不适用额外变量的情况下
  3. 筛选素数的方法
    埃拉托斯特尼筛法:从2开始,将每个素数的各个倍数,标记为合数,剩下的未标记的就是素数。
  4. 位运算
    可以通过位运算和0、1相与的操作来判断该位上是否是1,>>> 表示无符号右位移,并且在最左边插入零, >> 表示有符号位移,他们两个的区别是 >>> 不考虑符号位,这样可以保证被移动数的为模式不变,不会因为符号位的扩展而改变其值,>>考虑符号位

打乱数组

万物的算法日记|第一天,万物的算法日记,算法,数据结构
代码:

class Solution {
    private int[] nums;
    private Random random;
    public Solution(int[] nums) {
        this.nums = nums;
        random = new Random();
    }
    
    public int[] reset() {
        return nums;
    }
    
    public int[] shuffle() {
        if(nums == null){
            return null;
        }
        int []a = nums.clone();
        for(int j =1;j<a.length;j++){
            int i = random.nextInt(j+1);
            swap(a,i,j);
        }
        return a;
    }
    private void swap(int []a,int i,int j){
        if(i != j){
            a[i] ^= a[j];
            a[j] ^= a[i];
            a[i] ^= a[j];
        }
    }
}

学到的知识点:

  1. random.nextInt(j+1) 表示范围是从0-j
  2. 交换两个数的值,使用异或操作,^= 效率更高,通过三次的异或操作,可以交换数组中的两个值,在不适用额外变量的情况下

计数质数

万物的算法日记|第一天,万物的算法日记,算法,数据结构
代码:

class Solution {
    public int countPrimes(int n){
        boolean[] arr = new boolean[n];
        int cnt = 0;
        //埃拉托斯特尼筛法
        for(int i =2;i<n;i++){
            if(arr[i])
                continue;
            cnt++;
            for(int j =i;j<n;j+=i){
                arr[j] = true;
            }
        }
        return cnt;
    }
}

学到的知识点:

  1. 筛选素数的方法:
    埃拉托斯特尼筛法:从2开始,将每个素数的各个倍数,标记为合数,剩下的未标记的就是素数。
代码模版:
        for(int i =2;i<n;i++){
            if(arr[i])
                continue;
            cnt++;
            for(int j =i;j<n;j+=i){
                arr[j] = true;
            }
        }

位1的个数

万物的算法日记|第一天,万物的算法日记,算法,数据结构
代码:


// 位1 的个数
public class day6_12_6 {
    //将 n 向右移
    public int hammingWeight(int n ){
        int count =0;
        for(int i =0;i<32;i++){
            if(((n>>>i) &1) == 1){
                count++;
            }
        }
        return count;
    }
    //将 1 向左移
    public int hammingWeight1(int n){
        int count = 0;
        for(int i =0;i<32;i++){
            if((n%(1<<i)) != 0){
                count++;
            }
        }
        return count;
    }
}

学到的知识点:

  1. 可以通过位运算和0、1相与的操作来判断该位上是否是1,>>> 表示无符号右位移,并且在最左边插入零, >> 表示有符号位移,他们两个的区别是 >>> 不考虑符号位,这样可以保证被移动数的为模式不变,不会因为符号位的扩展而改变其值,>>考虑符号位

汉明距离

万物的算法日记|第一天,万物的算法日记,算法,数据结构
代码:

class Solution {
     public int hammingDistance(int x,int y){
        int xor = x^y;
        int res = 0;
        while(xor != 0){
            res+=xor&1;
            xor = xor>>>1;
        }
        return res;
    }
}

学到的知识点:

  1. 有两个数,通过异或操作,在二进制表达式中,如果同一对位数相同经过异或操作就是0,不同就是1,所以之后通过无符号移动和1进行与操作就可以得出两个不同的数之间的二进制距离了、

颠倒二进制位

万物的算法日记|第一天,万物的算法日记,算法,数据结构
代码:

public class Solution {
    // you need treat n as an unsigned value

    //    res <<= 1;: 这行代码将 res 左移一位,相当于将 res 中的所有位向左移动一个位置。这样做是为了为下一步的操作腾出一个空位。
//    res += n & 1;: 这行代码将 n 的最低位(即最右边的位)与 1 进行按位与操作,并将结果加到 res 中。这样做是为了将 n 的最低位放置到 res 的对应位置。
//    n >>= 1;: 这行代码将 n 右移一位,将 n 的所有位都向右移动一个位置。这样做是为了处理 n 的下一位。
//    通过循环的迭代,每次将 n 的最低位取出,并将其放置到 res 的对应位置上,最终完成了整数的二进制反转。
    public int reverseBits(int n){
        int res = 0;
        for(int i =0;i<32;i++){
            res <<=1;
            res+=n&1;
            n>>=1;
        }
        return res;
    }
}

学到的知识:文章来源地址https://www.toymoban.com/news/detail-547000.html

  1. 两个不同的数 相加,其实底层是位运算的相加,这就不难理解,上述代码中res+=n&1 这一步操作了

到了这里,关于万物的算法日记|第一天的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 万物的算法日记|第三天

    万物的算法日记|第三天

    笔者自述: 一直有一个声音也一直能听到身边的大佬经常说,要把算法学习搞好,一定要重视平时的算法学习,虽然每天也在学算法,但是感觉自己一直在假装努力表面功夫骗了自己,没有规划好自己的算法学习和总结,因为后半年也该找实习了,所以每日的算法题要进行恶

    2024年02月09日
    浏览(9)
  • 数据结构英文习题解析-第一章 算法复杂度分析Algorithm Analysis

    前言:最近快到FDS考试了,po重刷了一下学校的题目,自己整理了一些解析orz 因为po在自己找解析和学习的过程中非常痛苦,所以在此共享一下我的题目和自己写的解题思路,欢迎各位指出错误~全章节预计会陆续更新,可在专栏查看~ HW1 1. The major task of algorithm analysis is to an

    2024年03月12日
    浏览(47)
  • 第一百零五天学习记录:数据结构与算法基础:顺序表(王卓教学视频)

    第一百零五天学习记录:数据结构与算法基础:顺序表(王卓教学视频)

    注:笔记截图均来自王卓数据结构教学视频 线性表是具有相同特性的数据元素的一个有限序列 同一线性表中的元素必定具有相同特性,数据元素间的关系是线性关系。 稀疏多项式的运算 顺序存储结构存在的问题 1、存储空间分配不灵活 2、运算的空间复杂度高 引出链式存储

    2024年02月15日
    浏览(11)
  • 第一百零六天学习记录:数据结构与算法基础:单链表(王卓教学视频)

    第一百零六天学习记录:数据结构与算法基础:单链表(王卓教学视频)

    结点在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理上不一定相邻 线性表的链式表示又称为非顺序映像或链式映像。 用一组物理位置任意的存储单元来存放线性表的数据元素。 这组存储单元既可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意

    2024年02月16日
    浏览(16)
  • 架构师日记-从数据库发展历程到数据结构设计探析

    架构师日记-从数据库发展历程到数据结构设计探析

    作者:京东零售 刘慧卿 起初,数据的管理方式是文件系统,数据存储在文件中,数据管理和维护都由程序员完成。后来发展出树形结构和网状结构的数据库,但都存在着难以扩展和维护的问题。直到七十年代,关系数据库理论的提出,以表格形式组织数据,数据之间存在关

    2024年02月04日
    浏览(11)
  • 数据结构(初阶)第一节:数据结构概论

    数据结构(初阶)第一节:数据结构概论

    本篇文章是对数据结构概念的 纯理论 介绍,希望系统了解数据结构概念的友友可以看看,对概念要求不高的友友稍做了解后移步下一节: 数据结构(初阶)第二节:顺序表-CSDN博客 目录 正文 1.数据结构的相关概念 1.1什么是数据 1.2什么是数据结构 1.3为什么需要数据结构 1

    2024年04月10日
    浏览(10)
  • 数据结构预习笔记第一章-数据结构的概念

    数据结构预习笔记第一章-数据结构的概念

    重点理解 数据结构的定义 , 逻辑结构 , 存储结构 , 算法的时间效率分析和算法的空间效率分析 2.1 什么是数据结构 概念😵 数据 :所有的数字,字符和能够被输入到计算机中进行运算的符号的集合。 数据元素 :数据元素是数据的 基本单位 ❗️,在计算机中通常是作为

    2024年01月25日
    浏览(15)
  • 第一章-数据结构绪论

    第一章-数据结构绪论

    数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。 程序设计的实质是选择一个好的结构,再设计一种好的算法。 数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处

    2024年02月13日
    浏览(14)
  • 数据结构入门篇:第一篇

    数据结构入门篇:第一篇

    🤔首先,为什么要学数据结构? 数据结构的 概念 :在内存中对数据进行管理; 数据结构的学习能让我们在处理大量数据时提高处理效率,即让我们在不同的场景下更快的处理大量数据; 🤔算法和数据结构有什么关系? 算法 就是处理数据的一种方法; 数据结构是为算法服

    2023年04月18日
    浏览(14)
  • 408数据结构第一章

    1.数据 数据是信息的 载体 计算机程序 识别和处理 的符号的集合 2.数据元素 数据的 基本单位 整体 进行考虑和处理 若干 数据项 组成 数据项是构成元素的不可分割的 最小单位 3.数据对象 具有 相同性质 的数据元素的集合 4.数据类型 原子类型 结构类型 抽象数据类型 5.数据结

    2024年02月08日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包