Leetcode算法题
二进制求和
给两个字符串a和b,以二进制字符串的形式返回它们的和。
示例 1:
输入:a = “11”, b = “1”
输出:“100”
示例 2:
输入:a = “1010”, b = “1011”
输出:“10101”
提示:
1 <= a.length, b.length <= 104
a 和 b 仅由字符 ‘0’ 或 ‘1’ 组成
字符串如果不是 “0” ,就不含前导零
列竖式
我们可以借鉴列竖式的方法,末尾对齐,逐位相加。
在十进制的计算中逢十进一,二进制中逢二进一。
具体的,可以取n=max{|a|,|b|},循环n次,从最低位开始遍历。
使用一个变量carry表示上一个位置的进位,初始值为0。
记当前位置对齐的两个位ai和bi,则每一位的答案为(carry+ai+bi)mod2,下一位的进位为(carry+ai+bi)/2。
重复上述步骤,直到数字a和b每一位计算完毕,最后如果carry的最高位不为0,则将最高位添加到计算结果的末尾。
注意
为了让各个位置对齐,可以先反转这个代表二进制数字的字符串。
class Solution{
public:string addBinary(string a, string b){string ans;int n = max(a.size(),b.size());reverse(a.begin(),a.end());reverse(b.begin(),b.end());int carry = 0;for(int i=0; i<n; i++){carry += i < a.size() ? a.at(i) == '1' : 0;carry += i < b.size() ? b.at(i) == '1' : 0;ans.push_back((carry%2)?'1':'0');carry/=2;}if(carry){ans.push_back('1');}reverse(ans.begin(),ans.end());return ans;}
}
x的平方根
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。
示例 1:
输入:x = 4
输出:2
示例 2:
输入:x = 8
输出:2
解释:8 的算术平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。
前言
本题是一道常见的面试题,面试官一般会要求面试者在不使用 x\sqrt{x}
x
函数的情况下,得到 xxx 的平方根的整数部分。一般的思路会有以下几种:
通过其它的数学函数代替平方根函数得到精确结果,取整数部分作为答案;
通过数学方法得到近似结果,直接作为答案。
函数的情况下,得到 xxx 的平方根的整数部分。一般的思路会有以下几种:
通过其它的数学函数代替平方根函数得到精确结果,取整数部分作为答案;
通过数学方法得到近似结果,直接作为答案。
二分查找法
class Solution {
public:int mySqrt(int x) {int left = 0;int right = x;int ans = -1;while(left <= right){long mid = (left+right)/2;if(mid * mid <= x){ans = mid;left = mid+1;}else{right = mid-1;}}return ans;}
};
爬楼梯
假设正在爬楼梯,需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
示例 1:
输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
- 1 阶 + 1 阶
- 2 阶
示例 2:
输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
3. 1 阶 + 1 阶 + 1 阶
4. 1 阶 + 2 阶
5. 2 阶 + 1 阶
递归
用f(x)表示爬到第x阶台阶的方案数,最后一步可能是跨了一级台阶,也可能跨了两级台阶:
f(x) = f(x-1) + f(x-2);
class Solution {
public:int climbStairs(int n) {if(n == 1)return 1;else if(n == 2)return 2;return climbStairs(n-1) + climbStairs(n-2);}
};
时间复杂度:O(2n)
动态规划
class Solution {
public:int climbStairs(int n) {if(n<=2)return n;int first = 1;int second = 2;int ans = 0;for(int i=3; i<=n; i++){ans = first + second;first = second;second = ans;}return ans;}
};
删除排序链表中的重复元素
class Solution {
public:ListNode *deleteDuplicates(ListNode *head) {if(!head){return head;}ListNode *cur = head;while(!cur->next){if(cur->val == cur->next->val){cur->next = cur->next->next;}else{cur = cur->next;}}return head;}
}
合并两个有序数组
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。
请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。
注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。
示例 1:
输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
解释:需要合并 [1,2,3] 和 [2,5,6] 。
合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。
示例 2:
输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]
解释:需要合并 [1] 和 [] 。
合并结果是 [1] 。
示例 3:
输入:nums1 = [0], m = 0, nums2 = [1], n = 1
输出:[1]
解释:需要合并的数组是 [] 和 [1] 。
合并结果是 [1] 。
注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。
直接合并排序
最直观的方法是将nums2放进数组nums1的尾部,然后直接对整个数组进行排序。
class Solution {
public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {for(int i=0; i<n; i++){nums1[m+i] = nums2[i];}sort(nums1.begin(), nums1.end());}
};
双指针
class Solution {
public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {int sorted[m+n];int i=0,j=0,k=0;while(i<m && j<n){if(nums1[i] <= nums2[j]){sorted[k++] = nums1[i++];}else{sorted[k++] = nums2[j++];}}while(i <= m-1)sorted[k++] = nums1[i++];while(j <= n-1)sorted[k++] = nums2[j++];for(i=0; i<m+n; i++){nums1[i] = sorted[i];}}
};
时间复杂度:O(m+n)O(m+n)O(m+n)。
指针移动单调递增,最多移动 m+nm+nm+n 次,因此时间复杂度为 O(m+n)O(m+n)O(m+n)。
空间复杂度:O(m+n)O(m+n)O(m+n)。
需要建立长度为 m+nm+nm+n 的中间数组 sorted\textit{sorted}sorted。
相关文章:
Leetcode算法题
二进制求和 给两个字符串a和b,以二进制字符串的形式返回它们的和。 示例 1: 输入:a “11”, b “1” 输出:“100” 示例 2: 输入:a “1010”, b “1011” 输出:“10101” 提示: 1 <…...
数据结构之七大排序
𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary_walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”。…...
【MySQL】数据库中常用的函数
目录 聚合函数COUNT()函数的多种用法COUNT(*)COUNT(主键)COUNT(1)COUNT(常量)COUNT(非主键)COUNT(distinct(字段)) COUNT()函数小结 字符函数length(str)函数:获取参数值的字节个数concat(str1,str2,...)函数:字符串拼接upper(str)、lower(str)函数:大小…...
嵌入式面试常见问题(四)
1.在基于Linux的网络套接字编程中,如果需要创建一个IPv4的网络套接字,应该在socket函数中指定domain参数为AF_INET 解析: socket()函数创建套接字 函数原型:int socket(int domain, int type, int protocol); domain:协议簇&…...
用Java在Spring Boot项目中,如何传递来传递一个对象(多个参数??
前言: 在前面我们已经了解到,Spring Boot项目中,可以传递一个参数,或者多个参数,但是,随着参数的增加,咱们总不能每增加一个参数,就重新写一段代码吧??这样显…...
如何利用ChatGPT搞科研?论文检索、写作、基金润色、数据分析、科研绘图(全球地图、植被图、箱型图、雷达图、玫瑰图、气泡图、森林图等)
以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮,可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…...
一命通关二分搜索
二分法 简介 和双指针一样,二分法也是一种优化方法,或者说二分法就是双指针的一类。不过,二分法的思想比双指针诞生更早也更广泛,在我们日常生活里也无时不刻在使用二分的思想。 比如我们想回顾某些影片,但是只记得…...
串联所有单词的子串
题目链接 串联所有单词的子串 题目描述 注意点 words[i] 和 s 由小写英文字母组成1 < words.length < 5000可以以 任意顺序 返回答案words中所有字符串长度相同 解答思路 根据滑动窗口哈希表解决本题,哈希表存储words中所有的单词及单词的出现次数&#…...
【会议征稿通知】第四届经济发展与商业文化国际学术会议(ICEDBC2024)
第四届经济发展与商业文化国际学术会议(ICEDBC2024) The 4th International Conference on Economic Development and Business Culture (ICEDBC 2024) 第四届经济发展与商业文化国际学术会议(ICEDBC2024)将于2024年6月21-23日在…...
回溯算法套路③排列型回溯+N皇后【基础算法精讲 16】
46 . 全排列 链接 : . - 力扣(LeetCode) 思路 : 那么怎么确定选了那个数呢? 这里设置一个used表示i选没选过 ; class Solution { public:vector<vector<int>> ans;vector<int> path;void backtrack(vector<int>nums,vect…...
MyBatis-Plus 框架中的自定义元对象处理器
目录 一、代码展示二、代码解读 一、代码展示 package com.minster.yanapi.handler;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component;import java.util…...
Node.js_基础知识(fs模块 - 文件操作)
写入 文件操作 流式写入:fs.createWriteStream(path[, options]) 可以减少打开关闭文件的次数适用于:大文件写入、频繁写入参数说明: path:文件路径文件夹操作: 调用mkdir方法:fs.mkdir(./a/b/c, err => {}) 递归创建文件夹:加参数recursive fs.mkdir(./a/b/c, {recu…...
基于C#开发OPC DA客户端——搭建KEPServerEX服务
简介 OPC DA (OLE for Process Control Data Access) 是一种工业自动化领域中的通信协议标准,它定义了应用程序如何访问由OPC服务器提供的过程控制数据。OPC DA标准允许软件应用程序(客户端)从OPC服务器读取实时数据或向服务器写入数据&…...
让你的函数,返回你需要的“两个值” (函数传址、结构体作为参数传参)
总结:1.结构体完成你的目标 2.指针传参 方法2. void get_a_b(int* a, int* b) { *a 13; *b 14; //通过解引用,找到并修改 } int main() { int a 0; int b 0; get_a_b(&a, &b); //传地址 prin…...
快速上手:在 Android 设备上运行 Pipy
Pipy 作为一个高性能、低资源消耗的可编程代理,通过支持多种计算架构和操作系统,Pipy 确保了它的通用性和灵活性,能够适应不同的部署环境,包括但不限于云环境、边缘计算以及物联网场景。它能够在 X86、ARM64、海光、龙芯、RISC-V …...
【操作系统学习笔记】文件管理1.3
【操作系统学习笔记】文件管理1.3 参考书籍: 王道考研 视频地址: Bilibili I/O 控制方式 程序直接控制方式中断驱动方式DMA 方式通道控制方式 程序直接控制方式 关键词: 轮询 完成一次读/写操作的流程 CPU 向控制器发出读指令。于是设备启动,并且状态寄存器设…...
基于springboot+vue的酒店管理系统
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 主要内容:毕业设计(Javaweb项目|小程序|Pyt…...
Linux 相关命令
文章目录 目录相关操作vim 编辑器命令行模式插入模式底行模式 目录相关操作 查看当前目录下的文件 ls创建目录 mkdir 目录名进入文件,首先确认位于文件的目录 vi 文件名 vim 编辑器 命令行模式 控制光标的移动,字符或行的删除,移动复制某区域…...
阿里云搭建私有docker仓库(学习)
搭建私有云仓库 首先登录后直接在页面搜索栏中搜索“容器镜像服务” 进入后直接选择个人版(可以免费使用) 选择镜像仓库后创建一个镜像仓库 在创建仓库之前我们先创建一个命名空间 然后可以再创建我们的仓库,可以与我们的github账号进行关联…...
MySQL数据库基本操作(一)
数据库的基本概念 1. 数据库的英文单词: DataBase 简称 : DB 2. 什么数据库?* 用于存储和管理数据的仓库。 3. 数据库的特点:1. 持久化存储数据的。其实数据库就是一个文件系统2. 方便存储和管理数据3. 使用了统一的方式操作数…...
大模型评测、质量保证、datasets数据集等
文章目录示例代码datasetsdatasets和自建考题哪个好?常见的数据集有哪些?数据集-1. 数学与逻辑推理类 (你的主战场)数据集-2. 综合知识与学术能力类 (全能学霸)数据集-3. 编程与代码能力类 (程序员助手)数据集-4. 语言理解与指令遵循类 (听话程度)self-refine和sel…...
(新)IEEE Access论文投稿全流程实战解析
1. IEEE Access投稿前的准备工作 第一次投稿到IEEE Access这种国际期刊,很多人都会感到无从下手。作为一个审过稿也投过稿的老手,我完全理解这种忐忑。别担心,跟着我的步骤走,保证你能顺利完成整个投稿流程。 首先得明确一点&…...
云优化 SEO 软件的内容优化功能有哪些
云优化 SEO 软件的内容优化功能有哪些 在当今的数字化时代,网站的流量和排名直接关系到企业的知名度和市场竞争力。而在这其中,云优化 SEO 软件的内容优化功能起到了至关重要的作用。云优化 SEO 软件的内容优化功能具体有哪些呢?本文将详细探…...
2026出海企业培训10大常见痛点问题:预算、效果、选型关注点
随着“一带一路”倡议深化与全球化竞争加剧,中国企业出海步伐持续加速。截至2025年底,中国在境外设立企业超过5万家,遍布190个国家和地区。对外投资存量连续9年保持世界前三,2025年对外直接投资1743.8亿美元,比上年增长…...
终极B站视频下载指南:使用BBDown快速获取高清资源
终极B站视频下载指南:使用BBDown快速获取高清资源 【免费下载链接】BBDown Bilibili Downloader. 一个命令行式哔哩哔哩下载器. 项目地址: https://gitcode.com/gh_mirrors/bb/BBDown BBDown是一款强大的命令行式B站视频下载工具,让你轻松保存哔哩…...
Swift-All部署教程:快速搭建多模型推理与微调环境
Swift-All部署教程:快速搭建多模型推理与微调环境 1. 从零开始:为什么你需要Swift-All? 如果你正在研究大模型,或者想把大模型用在实际项目里,大概率会遇到这几个头疼的问题: 模型太多,下载太…...
电商智能客服:基于Qwen3-VL:30B的多模态问答系统实现
电商智能客服:基于Qwen3-VL:30B的多模态问答系统实现 1. 引言 电商客服每天面对海量咨询,从"这件衣服有没有M码"到"这个电器怎么安装",问题五花八门。传统客服需要不停切换商品页面、说明书、物流信息,忙得…...
Spring_couplet_generation 模型推理性能优化:操作系统级调优指南
Spring_couplet_generation 模型推理性能优化:操作系统级调优指南 想让你的春联生成模型跑得更快、更稳吗?很多朋友在部署AI模型时,往往只关注模型本身和代码,却忽略了承载这一切的“地基”——操作系统。今天,我们就…...
Electron实战:将你的网页应用打包成桌面客户端
在当今数字化时代,网页应用已经渗透到我们工作和生活的方方面面。有时我们仍然需要一个桌面客户端来提供更稳定的运行环境、离线功能或更好的系统集成。Electron作为一个强大的跨平台框架,能够帮助开发者轻松将网页应用打包成桌面客户端。无论是开发效率…...
EasyAnimation性能优化指南:确保动画流畅运行的7个关键点
EasyAnimation性能优化指南:确保动画流畅运行的7个关键点 【免费下载链接】EasyAnimation A Swift library to take the power of UIView.animateWithDuration(_:, animations:...) to a whole new level - layers, springs, chain-able animations and mixing view…...
