首页 > 编程语言 >面试-基本的算法要了如指掌,比如查找、排序、动态规划、分治等

面试-基本的算法要了如指掌,比如查找、排序、动态规划、分治等

时间:2023-08-02 13:33:18浏览次数:36  
标签:元素 TreeNode val int 分治 nullptr 了如指掌 查找 排序

在了解这些基本算法之前还是得先了解这些基本的数据结构,这些都是要熟记与心的。

基本数据结构

比如:字符串、链表、二叉树、堆、栈、队列、哈希等

字符串
string str = "hello world"; // 使用格式
// string 是类。
// str输出的大小,取决于size函数的返回值。
链表
class ListNode
{
 	public:
  	int val;
  	ListNode* next;
  	ListNode(int x): val(x), next(nullptr){}
}

class LinkedList
{
	private:
  	ListNode* head;
  public:
  	LinkedList():head(nullptr){}
  ...增删改查操作
}
二叉树
class TreeNode
{
	public:
  	int val;
  	TreeNode* left;
  	TreeNode* right;
  	TreeNode(int val): val(val), left(nullptr), right(nullptr){}
  	TreeNode(): val(0), left(nullptr), right(nullptr){}
}

class BinaryTree
{
	private:
  	TreeNode* root;
  public:
  	BinaryTree():root(nullptr){}
  ... 增删改查
}
priority_queue<typename> pqu; // typename 可以表示为基本数据类型,或者是复杂的数据类型

基本算法分析-排序

选择排序

选择排序的算法流程如下:

  1. 初始状态下,所有元素未排序,即未排序(索引)区间为[0, n-1]。
  2. 选取区间[0, n-1]中的最小元素,将其与索引0处元素交换。完成后,数组前1个元素已排序。
  3. 选取区间[1,n-1]中的最小元素,将其与索引1处元素交换。完成后,数组前2个元素已排序。
  4. ....
  5. 仅剩的一个元素必定是最大元素,无需排序,因此数组排序完成。
/* 选择排序 */
void selectionSort(vector<int> &nums) {
    int n = nums.size();
    // 外循环:未排序区间为 [i, n-1]
    for (int i = 0; i < n - 1; i++) {
        // 内循环:找到未排序区间内的最小元素
        int k = i;
        for (int j = i + 1; j < n; j++) {
            if (nums[j] < nums[k])
                k = j; // 记录最小元素的索引
        }
        // 将该最小元素与未排序区间的首个元素交换
        swap(nums[i], nums[k]);
    }
}

算法特性

事件复杂度:O(n)

空间复杂度:O(1)

标签:元素,TreeNode,val,int,分治,nullptr,了如指掌,查找,排序
From: https://blog.51cto.com/u_14834110/6936662

相关文章

  • PHPHashtable 如何优化数组查找和排序
    PHPHashtable如何优化数组查找和排序PHP是一种高度流行的编程语言,被广泛用于web开发。它有很多的优点,例如易于学习、跨平台、简单易用的语法等等。而在PHP中,数组是一种非常常用的数据结构,它可以存储一组有序的数据,方便我们进行各种操作。PHPHashtable如何优化数组查找和排......
  • 算法-01-查找
    线性搜索法(LinearSearch)线性搜索(LinearSearch)算法又称为循序搜索(SequentialSearch)算法,是学习编程语言最先需要学会的搜索算法。它可以按照元素在集合中的顺序,从头开始进行走访,并连续判断目前走访到的元素是否是我们想要找的元素。 线性搜索法(LinearSearch)线性搜......
  • 在图片中查找指定文字的位置
    您好!对于在图片中查找指定文字的位置,您可以使用OCR(OpticalCharacterRecognition,光学字符识别)技术来实现。以下是一种常见的基本步骤:导入必要的库:例如OpenCV用于图像处理,Tesseract用于OCR识别。读取图像:使用OpenCV库中的函数读取图像文件。图像预处理:对图像进行预处理,例如灰度......
  • 二分查找
    二分查找前提:有序思路:mid=(left+right)/2若mid=value,输出mid下标若mid<value,mid=left+1若mid>value,mid=right-1publicclassTest2{@Testpublicvoidtest1(){int[]arr={-99,-54,-2,0,0,2,33,43,256,999};......
  • linux 中查找隐藏文件及排除隐藏文件
     001、查找当前目录下的隐藏文件[root@PC1test01]#lsa.txtdir1[root@PC1test01]#ls-a...a.txtdir1.x.txt[root@PC1test01]#find./-maxdepth1-typef-name".*"##查找当前目录下的隐藏文件./.x.txt 002、排除当前目录下的隐藏文件[roo......
  • 二分查找常见变种方法的代码实现
    二分查找变种:1.查找大于target的所有值的最小索引;2.查找等于target的所有值的最大索引(上界);3.查找大于target的所有值的最大索引; 代码示例:/***二分查找工具对象*/constBinarySearch=(function(){return{/***找出大于target的所有值......
  • 二分查找法
    文章目录二分查找法二分查找的关键:二分查找法演示二分查找法适用于有序数组,顺序查找绝大多数情况有效但是由于它是一个一个元素进行查找,其效率很低,只有一个for循环二分查找的关键:找到最左边元素(left)和最右边元素(right),确定中间元素(mid)intr=0; scanf("%d",&r); intarr[]={0......
  • luogu P3733 [HAOI2017] 八纵八横 题解【线段树分治+线性基+可撤销并查集+bitset】
    目录题目大意解题思路code题目大意题目链接给出一张\(n\)个点\(m\)条边的连通无向图,边带边权\(w_i\)。有以下三种操作,共\(q\)次:\(\centerdot\)在点\(x,y\)之间加入一条边权为\(w_i\)的边,如果这是第\(i\)个此种操作,则记这条新边为第\(i\)条。\(\centerdot\)将第\(k......
  • 查找 SQL Server 中活动的 SQL 连接
    一、概述有多种方法可以找到SQLServer的活动SQL连接。本文分享一下几种常见的方法。二、解决方案2.1 SP_WHOSP_WHO作为查找SQLServer上运行的活动SQL连接的方法。SP_WHO将具有最少的列,但却是列出活动连接的快速方法。特别是当SQLServer上有阻塞时,可以找到阻塞和......
  • 用于查找 SQL Server 中死锁的 T-SQL 查询
    用于查找SQLServer中死锁的T-SQL查询 早些时候,我写了一篇关于使用扩展事件来查找SQLServer上发生的死锁的文章。扩展事件对于跟踪服务器上短时间内发生的死锁有很大帮助,尤其是在生产环境中。然而,在开发环境中,我遇到过当多个开发人员尝试对表执行dml语句时出现持续长......