【面试】算法题和相关知识
今天参加某公司的专业面试,让手撕两个代码题,都不难但是考验细节处理。
一面题:实现快速排序题目描述输入一个整数数组,使用快速排序算法对其进行升序排序,并输出排序后的数组。要求使用递归实现快速排序算法。(提示:快速排序算法的基本思想是,选择一个基准元素,将数组分为两个子数组,左边的子数组都小于等于基准元素,右边的子数组都大于等于基准元素。)
思路首先,需要了解快速排序的原理。
快速排序是一种分而治之的排序算法,其工作原理是递归地将输入数组划分为较小的子数组,直到每个子数组仅包含一个元素或为空。然后,算法合并已排序的子数组以获得排序的输出。快速排序中的分区过程包括从数组中选择一个基准元素并重新排列数组元素,以便所有小于基准的元素都放置在基准的左侧,并且所有大于基准的元素都放置在基准的右侧。在基准两侧的两个子数组上递归地重复此过程,直到整个数组排序完毕。
以下是分区过程的更详细说明:
从数组中选择一个基准。这可以是第一个元素、最后一个元素或两者之间的任何元素;
初始化两个索引 i 和 j,以标记基准两侧子数组的边界。 i 被初始化为数组中第一个元素的索引,j 被初始化为数组中最后一个元素的 ...
[LeetCode]数组部分记录
[LeetCode]数组部分记录跟随《代码随想录》刷题,12.11~12.14 小记录。
下面我按照做题顺序,梳理一下目前做的题目。既是一个算法做题的分享,也是自己回顾知识,增强记忆点的方式。最近题目的特点是,基本最优解都是「双指针」解法。
前言—关于双指针算法双指针算法是一种常用于数组(或链表)操作的算法技巧,它通过维护两个指针,分别指向序列中的不同位置,以解决一些特定问题。这两个指针可以是同方向移动,也可以是相反方向移动。
常见的双指针算法有三种类型:
快慢指针: 主要用于解决链表中的问题,例如判断链表是否有环,找到链表的中间节点等。一个指针移动速度快(快指针),另一个指针移动速度慢(慢指针),从而在链表中实现一种追赶的效果。
左右指针: 主要用于数组或字符串的问题,例如在有序数组中找到两个数使它们的和等于目标值。左指针指向序列的开头,右指针指向序列的末尾,根据题目的要求,移动左右指针来达到特定的条件。
滑动窗口: 通常用于解决子数组或子串的问题,例如找到最小覆盖子串、最长无重复字符的子串等。通过维护一个区间(窗口),其中的元素满足一定的条件,然后根据条件移动窗口的起始位置或 ...
cin用法
简介C++中cin是标准输入流,用于从标准输入设备(通常是键盘)读取数据。cin的用法主要有以下几种:
1. cin >> 变量名从标准输入流读取数据,并将其赋值给变量名。cin>>可以读取整数、浮点数、字符串等数据。
12345678910111213141516171819202122#include <iostream>int main() { int a; double b; char c; std::cout << "请输入整数:"; std::cin >> a; std::cout << "请输入浮点数:"; std::cin >> b; std::cout << "请输入字符:"; std::cin >> c; std::cout << "您输入的整数是:" << a << std::endl; std::cout &l ...
【LeetCode】No.27-移除元素
题目给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
示例 1:
123输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2]解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。
示例 2:
123输入:nums = [0,1,2,2,3,0,4,2], val = 2输出:5, nums = [0,1,3,0,4]解释:函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。
思考这个题目不难,最常见的且能直接想到的就是暴力解法。我花了点时间,通过两个 ...
【LeetCode】TOP100-字母异位词
题目给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例示例 1:
12输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:
12输入: strs = [""]输出: [[""]]
示例 3:
12输入: strs = ["a"]输出: [["a"]]
提示:
1 <= strs.length <= 104
0 <= strs[i].length <= 100
strs[i] 仅包含小写字母
...
Homebrew使用记录
Homebrew使用记录1. homebrew-core (no Git repository)问题解决方法是:
1、删除homebrew
1sudo rm -rf Homebrew
2、重新安装,找到官网:macOS(或 Linux)缺失的软件包的管理器 — Homebrew,复制命令在终端执行:
1/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
我本地安装时候会报错。
2. Failed to connect to raw.githubusercontent.com port 443报错原文:
curl: (7) Failed to connect to raw.githubusercontent.com port 443 after 7 ms: Couldn’t connect to serve
解决方案:[Fixed] Failed to connect to raw.githubusercontent.co ...
Hexo用法
官网:Hexo文档:documentation答疑:troubleshootingGitHub:
快速开始创建新帖子1hexo new "My New Post"
更多用法: 写作
运行服务器1hexo server
简写:
1hexo s
更多用法: 服务器
生成静态文件1hexo generate
简写:
1hexo g
更多用法: 生成文件
部署到远程站点1hexo deploy
简写:
1hexo d
更多用法: 部署
hexo+fluid搭建个人博客
hexo+fluid搭建个人博客一、准备1. GitHub配置首先注册github账号。然后本地安装GIT,网上很多教程。
在GitHub上创建一个仓库,点击Your repositories,进入仓库页面。点击New按钮,进入仓库创建页面。填写仓库名,格式必须为<用户名>.github.io,然后点击Create repository。
创建完成后会提示创建文件,建议首先创建一个README文件,填写内容之后点击Commit new file提交。
回到仓库,点击Settings,然后点击左侧Pages,可以看到GitHub Pages。你的站点就是:https://<用户名>.github.io。[Build and deployment]配置项,选择Deploy from a branch。下面是配置的分支,通常是main。至此,GitHub上配置暂时完成。
2. hexo配置本地创建一个目录,例如hexo,然后进入该目录,通过npm安装:
1npm install -g hexo-cli
查看版本信息,确认安装完成:
1hexo -v
创建一个hex ...