美文网首页
简单小算法

简单小算法

作者: 左上偏右 | 来源:发表于2016-12-26 13:49 被阅读10次
  • 1、求素数

/**
 *  对正整数n,如果用2到根号n之间的所有整数去除,均无法整除,则n为质数。
 *  质数大于等于2 不能被它本身和1以外的数整除
 * @param val
 * @return
 */
private static boolean testPrime(int val){
    if (val<=3 && val>0) {
        return true;
    }
    for (int i = 2; i <= Math.sqrt(val); i++) {
        if (val%i==0) {
            return false;
        }
    }
    return true;
}
  • 2、查找整数对应二进制中1的个数

1、为什么n &= (n – 1)能清除最右边的1呢?因为从二进制的角度讲,n相当于在n - 1的最低位加上1。举个例子,8(1000)= 7(0111)+ 1(0001),所以8 & 7 = (1000)&(0111)= 0(0000),清除了8最右边的1(其实就是最高位的1,因为8的二进制中只有一个1)。再比如7(0111)= 6(0110)+ 1(0001),所以7 & 6 = (0111)&(0110)= 6(0110),清除了7的二进制表示中最右边的1(也就是最低位的1)。

    private static int BitCount2(int n) {
        int c = 0;
        for (c = 0; c<n; ++c) {
            n &= (n - 1); // 清除最低位的1
        }
        return c;
    }

2、普通移位算法

int BitCount(int n) {
        int c = 0; // 计数器
        while (n > 0) {
            if ((n & 1) == 1) // 当前位是1
                ++c; // 计数器加1
            n >>= 1; // 移位
        }
        return c;
    }

相关文章

  • 简单小算法

    有一个数组,里面只有一个值是唯一的,其余值都是重复成对出现。请设计一个算法,在O1的空间复杂度和On的时间复杂度内...

  • 简单小算法

    1、求素数 2、查找整数对应二进制中1的个数 1、为什么n &= (n – 1)能清除最右边的1呢?因为从二进制的...

  • 2018-11-14

    昨天学习了模拟退火算法以及一个小智力题:海盗分赃~ 模拟退火算法前先看了爬山算法,爬山算法是一种简单的贪心搜索算法...

  • 呐你们要的算法(一)No.17

    我是小蕉。 今天跟大家分享一下,机器学习中最简单的算法之一,KNN近邻算法,这是一个有监督的分类学习算法。 啥玩意...

  • 各种简单的算法小例子

    1.分治去重(数组去重:一分为二,left递归去重,right递归去重,循环right,如果不在left里,加到l...

  • Java一些简单的递归算法

    么么哒: 分享一些Java中一些简单的小算法 递归算法简单的来说就是自己调用自己,可以把一些复杂的问题转化成类似的...

  • 算法与数据结构(二):排序篇-O(n^2)算法:选择 &

    排序基础 O(n^2)的算法虽然简单,但也实用!让我们从最简单的基础排序算法开始,打开我们的算法大门! 排序算法 ...

  • LZW压缩算法

    参考链接:超级简单的数据压缩算法—LZW算法压缩算法——lzw算法实现LZW算法 LZW 压缩算法正确图解

  • 简单算法

    冒泡排序: while 实现的二分查找: 递归实现二分查找:

  • 简单算法

    一、3种简单排序 3种排序方法时间复杂度都是n23种简单排序对 数组排序速度: 插入排序 > 选择排序 > 冒泡法...

网友评论

      本文标题:简单小算法

      本文链接:https://www.haomeiwen.com/subject/zjsjvttx.html