算法通关村十三关-青铜:数字与数学基础问题
1.数字统计专题
统计特定场景下的符号或数字个数等
1.1符号统计
LeetCode1822 数组元素积的符号
https://leetcode.cn/problems/sign-of-the-product-of-an-array/description/
思路分析
如果将所有的数都乘起来,再判断正负,工作量大,还有可能溢出
实践发现,一个数是 -100 和 -1,对符号的贡献是一样的,只需要看有多少个负数,就能判断最后乘积的符号
代码实现
class Solution:def arraySign(self, nums: List[int]) -> int:ans = 1for i in nums:if i == 0:ans = 0elif i < 0:ans = -ansreturn ans
1.2 阶乘0的个数
面试题 16.05 设计一个算法,算出n阶乘有多少个尾随0
https://leetcode.cn/problems/factorial-zeros-lcci/
思路分析
如果硬算,一定会超时;
其实统计有多少个0,实际上是统计2的倍数和5的倍数一起出现多少对;
因为2的倍数出现的次数一定是大于5的倍数出现的次数,因此我们只需要检查5的倍数的出现的次数就好了;
统计 5,10,15 … 5*n 这样5的整数倍项出现的个数
其中,25 = 5^2 相当于两个5,会出现两个0,5^n将会出现n个0
尾随0的个数 = 5的倍数的个数 + 25的倍数的个数 + 125倍数的个数 + … + 5^n的倍数的个数
尾随0的个数 = 5的n次方的倍数的个数
代码实现
代码1:符合要求,但耗时较长
class Solution:def trailingZeroes(self, n: int) -> int:count = 0for i in range(1, n+1):while i % 5 == 0:count += 1i //= 5return count
代码2:
class Solution:def trailingZeroes(self, n: int) -> int:count = 0while n:n //= 5count += nreturn count
2.溢出问题
重要,只要设计到输入一个数字,都可能遇到
典型的题目有三个:数字反转、将字符串转成数组和回文数
java int 32位 [-2^31, 2^31-1]
python 无需考虑溢出
2.1整数反转
LeetCode 7. 整数反转
https://leetcode.cn/problems/reverse-integer/
思路分析
关键点
- 如何进行数字反转?
- 如何判断溢出?
代码实现
python和java中取余(%)的差异
print(4 % 10) # 4
print(6 % 10) # 6
print(-4 % 10) # 6
print(-6 % 10) # 4print(4 % -10) # -6
print(6 % -10) # -4
print(-4 % -10) # -4
print(-6 % -10) # -6
public class temp {public static void main(String[] args) {System.out.println(4 % 10); // 4System.out.println(6 % 10); // 6System.out.println(-4 % 10); // -4System.out.println(-6 % 10); // -6System.out.println(4 % -10); // 4System.out.println(6 % -10); // 6System.out.println(-4 % -10); // -4System.out.println(-6 % -10); // -6}
}
2.2字符串转整数
LeetCode8
2.3回文数
LeetCode9
思路分析
想法1:
- 数字自身直接反转,将反转后的数字与原始数字进行比较
- 如果相同,就是回文;否则,不是回文
- 缺点:可能会遇到溢出问题(不予采纳)
想法2:
为避免想法1中的溢出问题,考虑只反转 int 数字的一半
如果是回文,则后半部分反转后应该与原始数字的前半部分相同
代码实现
def isPalindrome(x: int):# 特殊情况if x < 0 or (x % 10 == 0 and x != 0):return Falseelif x == 0:return True# 计算后半部分反转的数字reversed_number = 0while x > reversed_number:reversed_number = reversed_number * 10 + x % 10x //= 10# 注意区分数字长度为奇数和偶数的情况# 奇数:判断 x == reversed_number // 10# 偶数:判断 x == reversedreturn x == reversed_number // 10 or x == reversed_numberif __name__ == '__main__':print(isPalindrome(-1))print(isPalindrome(10))print(isPalindrome(0))print(isPalindrome(1221))print(isPalindrome(2221))
3.进制专题
3.1七进制数
LeetCode504
给定一个整数 num,将其转化为7进制,并以字符串的形式输出,其中 -10^7 <= num <= 10^7
思路分析
数字7进制
10进制 0 1 2 3 4 5 6
7进制 0 1 2 3 4 5 6
10进制 7 8 9 10 11 12 13
7进制 10 11 12 13 14 15 16
转7进制的主要过程:循环取余和整除,最后将所有的余数反过来即可
举例:10进制 101
101 ÷ 7 = 14 余 3
14 ÷ 7 = 2 余 0
2 ÷ 7 = 0 余 27进制表示 203 2*7^2 + 0*7^1 + 3*7^0 = 101
注:如果num<0,先对num取绝对值,再转换
代码实现
def convertToBase7(num: int):if num == 0:return "0"sign = num < 0res = ""if sign:num *= -1while num:res = str(num % 7) + resnum //= 7if sign:res = "-" + resreturn resif __name__ == '__main__':print(convertToBase7(-101)) # -203print(convertToBase7(0)) # 0print(convertToBase7(101)) # 203print(convertToBase7(7)) # 10
3.2进制转换
给定一个十进制数M,以及需要转换的进制数N,将十进制数M转换为N进制数,M是32为整数,2<=N<=16
思路分析
难点分析
- 超过进制最大范围之后如何准确映射到其他进制
特别是ABCDEF这种情况,简单的方式是大量采用if判断,但是这样会出现写了一坨,最后写不下去 - 需要对结果进行一次转转置
- 需要判断负号
实现方案
- 定义大小为16的数组,保存的是2到16的各个进制的值对应的标记
这样赋值时只计算下标,不必考虑不同进制的转换关系 - Java使用StringBuffer完成数组转置等功能,如果不记得这个方法,工作量直接飙升
- 通过一个flag来判断整数还是负数,最后才处理
代码实现
def convert(M, N):"""将10进制数M转换为N进制"""sign = -1 if M < 0 else 1M *= signsb = []digits = ["0", "1", "2", "3", "4", "5","6", "7", "8", "9", "A", "B","C", "D", "E", "F"]while M:digit = M % N# 通过数组解决了大量繁琐的不同进制映射的问题sb.append(digits[digit])M //= Nif sign < 0:sb.append("-")sb.reverse()return "".join(sb)if __name__ == '__main__':print(convert(100, 7)) # 202print(convert(11, 16)) # Bprint(convert(-100, 7)) # -202相关文章:
算法通关村十三关-青铜:数字与数学基础问题
1.数字统计专题 统计特定场景下的符号或数字个数等 1.1符号统计 LeetCode1822 数组元素积的符号 https://leetcode.cn/problems/sign-of-the-product-of-an-array/description/ 思路分析 如果将所有的数都乘起来,再判断正负,工作量大,还…...
猜拳游戏小程序源码 大转盘积分游戏小程序源码 积分游戏小程序源码
简介: 猜拳游戏大转盘积分游戏小程序前端模板源码,一共五个静态页面,首页、任务列表、大转盘和猜拳等五个页面 图片:...
【Python】爬虫练习-爬取豆瓣网电影评论用户的观影习惯数据
目录 前言 一、配置环境 1.1、 安装Python 1.2、 安装Requests库和BeautifulSoup库 1.3.、安装Matplotlib 二、登录豆瓣网(重点) 2.1、获取代理 2.2、测试代理ip是否可用 2.3、设置大量请求头随机使用 2.4、登录豆瓣网 三、爬取某一部热门电影…...
webpack基础配置【总结】
webpack打包原理: webpack是一个js应用程序的静态模块打包工具,当webpack处理应用程序时,它的内部构建一个依赖图,此时依赖会映射项目中所需的每个模块,并生成一个或多个bundle包。因此我们会安装配置各种打包规则&…...
typescript 支持与本地调试
typescript 支持与本地调试 typescript 支持与本地调试 前言支持 typescript函数的本地调试 启用 node-terminal 调试invoke localserverless-offline Next Chapter完整示例及文章仓库地址 前言 在上一章节,我们创建了一个 hello world 函数,并把它顺…...
后端面试话术集锦第 十八 篇:JVM面试话术
这是后端面试集锦第十八篇博文——JVM面试话术❗❗❗ 1. 介绍下JVM JVM主要包括:类加载器(class loader)、执行引擎(exection engine)、本地接口(native interface)、运行时数据区(Runtimedata area) 类加载器:加载类文件到内存。Class loader只管加载,只要符合文件…...
“历久弥新 | 用AI修复亚运珍贵史料”活动震撼来袭!
时隔近半个世纪,新中国第一次参与亚运会的影像资料将首次对外披露。只是年代久远,老照片老视频都有了岁月痕迹,画面不再清晰,这些珍贵史料急需你的帮助! 一、活动介绍 2023年,正值亚运110周年,…...
uni-app 之 scroll-view和swiper
uni-app 之 scroll-view和swiper <!-- vue2的<template>里必须要有一个盒子,不能有两个,这里的盒子就是 view--> <template><view><navigator url"/pages/home/home"><button style"background: #ff00f…...
Harmony网络请求工具类
使用的网络请求框架是axios 1、安装axios ohpm install @ohos/axios2、封装 import axios, { FormData } from "@ohos/axios" import fs from @ohos.file.fs import ArrayList from @ohos.util.ArrayList/*** 网络请求工具类*/ class HttpManager {baseUrl:string…...
【Python 自动化】自媒体剪辑第一版·思路简述与技术方案
大家都知道我主业是个运维开发(或者算法工程师),每天时间不多,但我又想做自媒体。然后呢,我就想了个方案,每天起来之后写个短视频的脚本,包含一系列图片和文字,然后上班的时候给它提…...
【前端】webpack打包去除console.log
0 问题 需要在打包的时候,自动地去除掉所有console.log 1 方法 // vue.config.js //... module.exports {//...config.optimization.minimizer[0].iptions.terserOptions.compress.drop_console true//... } //...也可以用if(process.env.NODE_ENV production…...
docker使用(二)提交到dockerhub springboot制作镜像
docker使用(二) dockerhub创建账号创建存储库成功!开始推送获取image名 提交成功SpringBoot项目制作Dockerfile镜像部署打jar包 dockerhub创建账号 (自认为可以理解为github一类的东西) 单击创建存储库按钮。 设定存…...
antd中Popover 气泡卡片样式修改
最近在开发react项目的一个新需求时,遇到气泡卡片Popover组件样式调整的问题,发现不管是在标签中设置className属性,还是在<Popover>标签中直接设置style属性,都不起作用。 最后搜索查阅发现要使用overlayClassName index…...
3月面试华为被刷,准备半年,9月二战华为终于上岸,要个27K不过分吧?
终于二战上岸了,二战华为也并不是说非华为不可,只是觉得心里憋着一口气,这就导致我当时有其他比较好的offer,我也没有去,就是想上岸华为来证明自己,现在也算是如愿了,来跟大伙们分享一下~ 个人情况 我本人…...
Kali之BurpSuite_pro安装配置
文章目录 配置jdk环境安装BurpSuitePro设置快捷方式启动方式 BurpSuite2021专业版本地址: 下载链接:https://pan.baidu.com/s/1PjzcukRDoc_ZFjrNxI8UjA 提取码:nwm7 我的安装工具都在/home/kali/tools/ 解压后我放在burpsuite_pro目录下 把j…...
双指针算法总结
双指针 常见的双指针有两种形式:对撞指针,左右指针。 对撞指针: 对撞指针一般用于顺序结构中,也称左右指针。 • 对撞指针从两端向中间移动。以个指针从最左端开始,另⼀个从最右端开始,然后逐渐往中间逼…...
开源照片管理服务LibrePhotos
本文是为了解决网友 赵云遇到的问题,顺便折腾的。虽然软件跑起来了,但是他遇到的问题,超出了老苏的认知。当然最终问题还是得到了解决,不过与 LibrePhotos 无关; 什么是 LibrePhotos ? LibrePhotos 是一个自托管的开源…...
Linux指令
1 Linux 系统目录结构 /bin 存放系统指令(可执行文件) /boot 存放linux系统开机引导程序 /dev 存放设备文件的地方 /etc 存放系统配置文件的地方 /home 存放用户家目录的地方。 /lib和/lib64 存放系统动态链接库的地方。 /lostfound linux文件系统下特有…...
如何在Mac电脑上安装WeasyPrint:简单易懂的步骤
1. 安装homebrew 首先需要确保安装了homebrew,通过homebrew安装weasyprint可以将需要的库都安装好,比pip安装更简单快捷。 安装方法如下: /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)&qu…...
手机电脑scoket通信 手机软件 APP inventor 服务端程序python
python scoket 通信 再帮助同学坐课题的时候接触到了scoket通信,了解到这应该是基层网络通信的原理,于是就导出搜索了一下相关的资料,简单来说scoket通信就是,可以让不同设备在同一个网络环境的条件下,可以实现相互通…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
