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

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 阶 + 1 阶
  2. 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&#xff0c;以二进制字符串的形式返回它们的和。 示例 1&#xff1a; 输入:a “11”, b “1” 输出&#xff1a;“100” 示例 2&#xff1a; 输入&#xff1a;a “1010”, b “1011” 输出&#xff1a;“10101” 提示&#xff1a; 1 <…...

数据结构之七大排序

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary_walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…...

【MySQL】数据库中常用的函数

目录 聚合函数COUNT()函数的多种用法COUNT(*)COUNT(主键)COUNT(1)COUNT(常量)COUNT(非主键)COUNT(distinct(字段)) COUNT()函数小结 字符函数length(str)函数&#xff1a;获取参数值的字节个数concat(str1,str2,...)函数&#xff1a;字符串拼接upper(str)、lower(str)函数:大小…...

嵌入式面试常见问题(四)

1.在基于Linux的网络套接字编程中&#xff0c;如果需要创建一个IPv4的网络套接字&#xff0c;应该在socket函数中指定domain参数为AF_INET 解析&#xff1a; socket()函数创建套接字 函数原型:int socket(int domain, int type, int protocol); domain&#xff1a;协议簇&…...

用Java在Spring Boot项目中,如何传递来传递一个对象(多个参数??

前言&#xff1a; 在前面我们已经了解到&#xff0c;Spring Boot项目中&#xff0c;可以传递一个参数&#xff0c;或者多个参数&#xff0c;但是&#xff0c;随着参数的增加&#xff0c;咱们总不能每增加一个参数&#xff0c;就重新写一段代码吧&#xff1f;&#xff1f;这样显…...

如何利用ChatGPT搞科研?论文检索、写作、基金润色、数据分析、科研绘图(全球地图、植被图、箱型图、雷达图、玫瑰图、气泡图、森林图等)

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮&#xff0c;可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…...

一命通关二分搜索

二分法 简介 和双指针一样&#xff0c;二分法也是一种优化方法&#xff0c;或者说二分法就是双指针的一类。不过&#xff0c;二分法的思想比双指针诞生更早也更广泛&#xff0c;在我们日常生活里也无时不刻在使用二分的思想。 比如我们想回顾某些影片&#xff0c;但是只记得…...

串联所有单词的子串

题目链接 串联所有单词的子串 题目描述 注意点 words[i] 和 s 由小写英文字母组成1 < words.length < 5000可以以 任意顺序 返回答案words中所有字符串长度相同 解答思路 根据滑动窗口哈希表解决本题&#xff0c;哈希表存储words中所有的单词及单词的出现次数&#…...

【会议征稿通知】第四届经济发展与商业文化国际学术会议(ICEDBC2024)

第四届经济发展与商业文化国际学术会议&#xff08;ICEDBC2024&#xff09; The 4th International Conference on Economic Development and Business Culture (ICEDBC 2024) 第四届经济发展与商业文化国际学术会议&#xff08;ICEDBC2024&#xff09;将于2024年6月21-23日在…...

回溯算法套路③排列型回溯+N皇后【基础算法精讲 16】

46 . 全排列 链接 : . - 力扣&#xff08;LeetCode&#xff09; 思路 : 那么怎么确定选了那个数呢? 这里设置一个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) 是一种工业自动化领域中的通信协议标准&#xff0c;它定义了应用程序如何访问由OPC服务器提供的过程控制数据。OPC DA标准允许软件应用程序&#xff08;客户端&#xff09;从OPC服务器读取实时数据或向服务器写入数据&…...

让你的函数,返回你需要的“两个值” (函数传址、结构体作为参数传参)

总结&#xff1a;1.结构体完成你的目标 2.指针传参 方法2. void get_a_b(int* a, int* b) { *a 13; *b 14; //通过解引用&#xff0c;找到并修改 } int main() { int a 0; int b 0; get_a_b(&a, &b); //传地址 prin…...

快速上手:在 Android 设备上运行 Pipy

Pipy 作为一个高性能、低资源消耗的可编程代理&#xff0c;通过支持多种计算架构和操作系统&#xff0c;Pipy 确保了它的通用性和灵活性&#xff0c;能够适应不同的部署环境&#xff0c;包括但不限于云环境、边缘计算以及物联网场景。它能够在 X86、ARM64、海光、龙芯、RISC-V …...

【操作系统学习笔记】文件管理1.3

【操作系统学习笔记】文件管理1.3 参考书籍: 王道考研 视频地址: Bilibili I/O 控制方式 程序直接控制方式中断驱动方式DMA 方式通道控制方式 程序直接控制方式 关键词: 轮询 完成一次读/写操作的流程 CPU 向控制器发出读指令。于是设备启动&#xff0c;并且状态寄存器设…...

基于springboot+vue的酒店管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…...

Linux 相关命令

文章目录 目录相关操作vim 编辑器命令行模式插入模式底行模式 目录相关操作 查看当前目录下的文件 ls创建目录 mkdir 目录名进入文件&#xff0c;首先确认位于文件的目录 vi 文件名 vim 编辑器 命令行模式 控制光标的移动&#xff0c;字符或行的删除&#xff0c;移动复制某区域…...

阿里云搭建私有docker仓库(学习)

搭建私有云仓库 首先登录后直接在页面搜索栏中搜索“容器镜像服务” 进入后直接选择个人版&#xff08;可以免费使用&#xff09; 选择镜像仓库后创建一个镜像仓库 在创建仓库之前我们先创建一个命名空间 然后可以再创建我们的仓库&#xff0c;可以与我们的github账号进行关联…...

MySQL数据库基本操作(一)

数据库的基本概念 1. 数据库的英文单词&#xff1a; DataBase 简称 &#xff1a; DB 2. 什么数据库&#xff1f;* 用于存储和管理数据的仓库。 ​ 3. 数据库的特点&#xff1a;1. 持久化存储数据的。其实数据库就是一个文件系统2. 方便存储和管理数据3. 使用了统一的方式操作数…...

大模型评测、质量保证、datasets数据集等

文章目录示例代码datasetsdatasets和自建考题哪个好?常见的数据集有哪些&#xff1f;数据集-1. 数学与逻辑推理类 (你的主战场)数据集-2. 综合知识与学术能力类 (全能学霸)数据集-3. 编程与代码能力类 (程序员助手)数据集-4. 语言理解与指令遵循类 (听话程度)self-refine和sel…...

(新)IEEE Access论文投稿全流程实战解析

1. IEEE Access投稿前的准备工作 第一次投稿到IEEE Access这种国际期刊&#xff0c;很多人都会感到无从下手。作为一个审过稿也投过稿的老手&#xff0c;我完全理解这种忐忑。别担心&#xff0c;跟着我的步骤走&#xff0c;保证你能顺利完成整个投稿流程。 首先得明确一点&…...

云优化 SEO 软件的内容优化功能有哪些

云优化 SEO 软件的内容优化功能有哪些 在当今的数字化时代&#xff0c;网站的流量和排名直接关系到企业的知名度和市场竞争力。而在这其中&#xff0c;云优化 SEO 软件的内容优化功能起到了至关重要的作用。云优化 SEO 软件的内容优化功能具体有哪些呢&#xff1f;本文将详细探…...

2026出海企业培训10大常见痛点问题:预算、效果、选型关注点

随着“一带一路”倡议深化与全球化竞争加剧&#xff0c;中国企业出海步伐持续加速。截至2025年底&#xff0c;中国在境外设立企业超过5万家&#xff0c;遍布190个国家和地区。对外投资存量连续9年保持世界前三&#xff0c;2025年对外直接投资1743.8亿美元&#xff0c;比上年增长…...

终极B站视频下载指南:使用BBDown快速获取高清资源

终极B站视频下载指南&#xff1a;使用BBDown快速获取高清资源 【免费下载链接】BBDown Bilibili Downloader. 一个命令行式哔哩哔哩下载器. 项目地址: https://gitcode.com/gh_mirrors/bb/BBDown BBDown是一款强大的命令行式B站视频下载工具&#xff0c;让你轻松保存哔哩…...

Swift-All部署教程:快速搭建多模型推理与微调环境

Swift-All部署教程&#xff1a;快速搭建多模型推理与微调环境 1. 从零开始&#xff1a;为什么你需要Swift-All&#xff1f; 如果你正在研究大模型&#xff0c;或者想把大模型用在实际项目里&#xff0c;大概率会遇到这几个头疼的问题&#xff1a; 模型太多&#xff0c;下载太…...

电商智能客服:基于Qwen3-VL:30B的多模态问答系统实现

电商智能客服&#xff1a;基于Qwen3-VL:30B的多模态问答系统实现 1. 引言 电商客服每天面对海量咨询&#xff0c;从"这件衣服有没有M码"到"这个电器怎么安装"&#xff0c;问题五花八门。传统客服需要不停切换商品页面、说明书、物流信息&#xff0c;忙得…...

Spring_couplet_generation 模型推理性能优化:操作系统级调优指南

Spring_couplet_generation 模型推理性能优化&#xff1a;操作系统级调优指南 想让你的春联生成模型跑得更快、更稳吗&#xff1f;很多朋友在部署AI模型时&#xff0c;往往只关注模型本身和代码&#xff0c;却忽略了承载这一切的“地基”——操作系统。今天&#xff0c;我们就…...

Electron实战:将你的网页应用打包成桌面客户端

在当今数字化时代&#xff0c;网页应用已经渗透到我们工作和生活的方方面面。有时我们仍然需要一个桌面客户端来提供更稳定的运行环境、离线功能或更好的系统集成。Electron作为一个强大的跨平台框架&#xff0c;能够帮助开发者轻松将网页应用打包成桌面客户端。无论是开发效率…...

EasyAnimation性能优化指南:确保动画流畅运行的7个关键点

EasyAnimation性能优化指南&#xff1a;确保动画流畅运行的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…...