栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

算法零基础刷题--1

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

算法零基础刷题--1

个人简介

⭐️个人主页:摸鱼の文酱博客主页‍♂️
博客领域:java编程基础,mysql
写作风格:干货,干货,还是tmd的干货
精选专栏:【Java】【mysql】 【算法刷题笔记】
博主的码云gitee,平常博主写的程序代码都在里面。
支持博主:点赞、收藏⭐、留言
作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!

文章目录

今日学习内容:第1讲 幂和对数

收获 练习题目:

綾231. 2 的幂

 思路一:递归  思路二:换底公式  思路三:位运算 綾231. 3 的幂

 思路一:循环  思路二:换底公式 綾231. 4 的幂

 思路一:循环  思路二:换底公式

今日学习内容:第1讲 幂和对数

由于这个系列的博客内容是参照博主英雄哪里出来的付费专栏《算法零基础100讲》
为避免侵犯博主权益 ,本章学习内容参考《算法零基础100讲》(第1讲) 幂和对数

收获

本章学习主要是利用数学知识:幂和对数的概念来解决一些类似判断某个数是否是另一个数的幂的题目

例如:
给你一个整数 n ,要求写一个函数来判断它是否是 3 的幂.n 是 3 的幂要求有整数 x ,使得 3 x= n.

以前的思路一般都会用循环或者是递归的方式去处理 n ,看最后得到的数是否是1(x0=0)
像这样:

bool isPowerOfThree(int n){
    if(n==0){
        return false;
    }
//送进来的数是0,返回false
    if(n==1){
        return true;
    }
//送进来的数是1,返回true
    int a=n%3;
    if(a!=0){
    return false;
}
//新建一个变量a用来存储n除3的余数,余数不为0就没有被整除,返回false
return isPowerOfTwo(n/3);
//把该循环中的n/3送进下一循环
}

但是今天的学习给我提供了一个新的思路:利用换底公式

x是以 3 为底, n 的对数,也就是log3n,可以利用换底公式将其换为以 2 为底的式子计算
源码如下:

bool isPowerOfThree(int n){
    if(n == 0) {
        return false;                          
    }
    int x = (int)(log2(n) / log2(3) + 1e-8);   
    return fabs(n - pow(3, x)) < 1e-8;       
}
练习题目: 綾231. 2 的幂

问题描述:
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。

如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。

 思路一:递归
bool isPowerOfTwo(int n){
    if(n==0){
        return false;
    }
    if(n==1){
        return true;
    }
    if(n%2 !=0){
    return false;
}
return isPowerOfTwo(n/2);
}

 思路二:换底公式

这道题其实用递归就可以的,底数本来就是2,也不需要换底的,这里就当是练习一下

bool isPowerOfTwo(int n){
    if(n == 0) {
        return false;                         
    }
    int x = (int)(log2(n) / log2(2) + 1e-8);  
    return fabs(n - pow(2, x)) < 1e-8;        
}
 思路三:位运算

由于 2 的幂的特点:n & (n-1) = 0

bool isPowerOfTwo(int n){
     return n > 0 and n & (n - 1) == 0     
}
綾231. 3 的幂

问题描述:
给你一个整数 n,请你判断该整数是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。

如果存在一个整数 x 使得 n == 3x ,则认为 n 是 3 的幂次方。

 思路一:循环
bool isPowerOfThree(int n){
	if (n <= 0) return false;
        while (n % 3 == 0) n /= 3;
        return n == 1;
}
 思路二:换底公式
bool isPowerOfThree(int n){
      if(n == 0) {
        return false;                          
    }
    int x = (int)(log2(n) / log2(3) + 1e-8);   
    return fabs(n - pow(3, x)) < 1e-8;    
}
綾231. 4 的幂

问题描述:
给你一个整数 n,请你判断该整数是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。

如果存在一个整数 x 使得 n == 4x ,则认为 n 是 4 的幂次方。

 思路一:循环
bool isPowerOfThree(int n){
	if (n <= 0) return false;
        while (n % 4 == 0) n /= 4;
        return n == 1;
}
 思路二:换底公式
bool isPowerOfThree(int n){
      if(n == 0) {
        return false;                          
    }
    int x = (int)(log2(n) / log2(4) + 1e-8);   
    return fabs(n - pow(4, x)) < 1e-8;    
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/785056.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号