当前位置: 首页 > news >正文

算法通关村十三关-青铜:数字与数学基础问题

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

思路分析

难点分析

  1. 超过进制最大范围之后如何准确映射到其他进制
    特别是ABCDEF这种情况,简单的方式是大量采用if判断,但是这样会出现写了一坨,最后写不下去
  2. 需要对结果进行一次转转置
  3. 需要判断负号

实现方案

  1. 定义大小为16的数组,保存的是2到16的各个进制的值对应的标记
    这样赋值时只计算下标,不必考虑不同进制的转换关系
  2. Java使用StringBuffer完成数组转置等功能,如果不记得这个方法,工作量直接飙升
  3. 通过一个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/ 思路分析 如果将所有的数都乘起来&#xff0c;再判断正负&#xff0c;工作量大&#xff0c;还…...

猜拳游戏小程序源码 大转盘积分游戏小程序源码 积分游戏小程序源码

简介&#xff1a; 猜拳游戏大转盘积分游戏小程序前端模板源码&#xff0c;一共五个静态页面&#xff0c;首页、任务列表、大转盘和猜拳等五个页面 图片&#xff1a;...

【Python】爬虫练习-爬取豆瓣网电影评论用户的观影习惯数据

目录 前言 一、配置环境 1.1、 安装Python 1.2、 安装Requests库和BeautifulSoup库 1.3.、安装Matplotlib 二、登录豆瓣网&#xff08;重点&#xff09; 2.1、获取代理 2.2、测试代理ip是否可用 2.3、设置大量请求头随机使用 2.4、登录豆瓣网 三、爬取某一部热门电影…...

webpack基础配置【总结】

webpack打包原理&#xff1a; webpack是一个js应用程序的静态模块打包工具&#xff0c;当webpack处理应用程序时&#xff0c;它的内部构建一个依赖图&#xff0c;此时依赖会映射项目中所需的每个模块&#xff0c;并生成一个或多个bundle包。因此我们会安装配置各种打包规则&…...

typescript 支持与本地调试

typescript 支持与本地调试 typescript 支持与本地调试 前言支持 typescript函数的本地调试 启用 node-terminal 调试invoke localserverless-offline Next Chapter完整示例及文章仓库地址 前言 在上一章节&#xff0c;我们创建了一个 hello world 函数&#xff0c;并把它顺…...

后端面试话术集锦第 十八 篇:JVM面试话术

这是后端面试集锦第十八篇博文——JVM面试话术❗❗❗ 1. 介绍下JVM JVM主要包括:类加载器(class loader)、执行引擎(exection engine)、本地接口(native interface)、运行时数据区(Runtimedata area) 类加载器:加载类文件到内存。Class loader只管加载,只要符合文件…...

“历久弥新 | 用AI修复亚运珍贵史料”活动震撼来袭!

时隔近半个世纪&#xff0c;新中国第一次参与亚运会的影像资料将首次对外披露。只是年代久远&#xff0c;老照片老视频都有了岁月痕迹&#xff0c;画面不再清晰&#xff0c;这些珍贵史料急需你的帮助&#xff01; 一、活动介绍 2023年&#xff0c;正值亚运110周年&#xff0c…...

uni-app 之 scroll-view和swiper

uni-app 之 scroll-view和swiper <!-- vue2的<template>里必须要有一个盒子&#xff0c;不能有两个&#xff0c;这里的盒子就是 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 自动化】自媒体剪辑第一版·思路简述与技术方案

大家都知道我主业是个运维开发&#xff08;或者算法工程师&#xff09;&#xff0c;每天时间不多&#xff0c;但我又想做自媒体。然后呢&#xff0c;我就想了个方案&#xff0c;每天起来之后写个短视频的脚本&#xff0c;包含一系列图片和文字&#xff0c;然后上班的时候给它提…...

【前端】webpack打包去除console.log

0 问题 需要在打包的时候&#xff0c;自动地去除掉所有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使用&#xff08;二&#xff09; dockerhub创建账号创建存储库成功&#xff01;开始推送获取image名 提交成功SpringBoot项目制作Dockerfile镜像部署打jar包 dockerhub创建账号 &#xff08;自认为可以理解为github一类的东西&#xff09; 单击创建存储库按钮。 设定存…...

antd中Popover 气泡卡片样式修改

最近在开发react项目的一个新需求时&#xff0c;遇到气泡卡片Popover组件样式调整的问题&#xff0c;发现不管是在标签中设置className属性&#xff0c;还是在<Popover>标签中直接设置style属性&#xff0c;都不起作用。 最后搜索查阅发现要使用overlayClassName index…...

3月面试华为被刷,准备半年,9月二战华为终于上岸,要个27K不过分吧?

终于二战上岸了&#xff0c;二战华为也并不是说非华为不可&#xff0c;只是觉得心里憋着一口气&#xff0c;这就导致我当时有其他比较好的offer&#xff0c;我也没有去&#xff0c;就是想上岸华为来证明自己,现在也算是如愿了&#xff0c;来跟大伙们分享一下~ 个人情况 我本人…...

Kali之BurpSuite_pro安装配置

文章目录 配置jdk环境安装BurpSuitePro设置快捷方式启动方式 BurpSuite2021专业版本地址&#xff1a; 下载链接&#xff1a;https://pan.baidu.com/s/1PjzcukRDoc_ZFjrNxI8UjA 提取码&#xff1a;nwm7 我的安装工具都在/home/kali/tools/ 解压后我放在burpsuite_pro目录下 把j…...

双指针算法总结

双指针 常见的双指针有两种形式&#xff1a;对撞指针&#xff0c;左右指针。 对撞指针&#xff1a; 对撞指针一般用于顺序结构中&#xff0c;也称左右指针。 • 对撞指针从两端向中间移动。以个指针从最左端开始&#xff0c;另⼀个从最右端开始&#xff0c;然后逐渐往中间逼…...

开源照片管理服务LibrePhotos

本文是为了解决网友 赵云遇到的问题&#xff0c;顺便折腾的。虽然软件跑起来了&#xff0c;但是他遇到的问题&#xff0c;超出了老苏的认知。当然最终问题还是得到了解决&#xff0c;不过与 LibrePhotos 无关&#xff1b; 什么是 LibrePhotos ? LibrePhotos 是一个自托管的开源…...

Linux指令

1 Linux 系统目录结构 /bin 存放系统指令&#xff08;可执行文件&#xff09; /boot 存放linux系统开机引导程序 /dev 存放设备文件的地方 /etc 存放系统配置文件的地方 /home 存放用户家目录的地方。 /lib和/lib64 存放系统动态链接库的地方。 /lostfound linux文件系统下特有…...

如何在Mac电脑上安装WeasyPrint:简单易懂的步骤

1. 安装homebrew 首先需要确保安装了homebrew&#xff0c;通过homebrew安装weasyprint可以将需要的库都安装好&#xff0c;比pip安装更简单快捷。 安装方法如下&#xff1a; /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)&qu…...

手机电脑scoket通信 手机软件 APP inventor 服务端程序python

python scoket 通信 再帮助同学坐课题的时候接触到了scoket通信&#xff0c;了解到这应该是基层网络通信的原理&#xff0c;于是就导出搜索了一下相关的资料&#xff0c;简单来说scoket通信就是&#xff0c;可以让不同设备在同一个网络环境的条件下&#xff0c;可以实现相互通…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改&#xff0c;实现简单cat命令 输出信息到显示器&#xff0c;你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...