首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏算法工程师之路

    面试中的排序算法(Part 2

    今天我们介绍两个复杂点的排序算法随机快排和希尔排序,这也是面试的重点,考察范围包括代码书写,复杂度分析以及稳定性比较!好吧,让我们开始今天的算法之旅吧! 比如,给定一个数组[2, 3, 1, 9, 7, 6, 1, 4, 5],再给定一个数6,那么变换之后的数组可能就是[2, 3, 1, 1, 4, 5, 6, 7, 9]。 具体的算法原理是: 首先我们定义两个范围指针分别是less和more,以及一个当前指针cur,其中,less指针指向-1的位置,more指针指向N+1的位置。 那么我们这个算法是最好的么?为什么我们要认定一开始以最后一个数为分割数呢,如果每次分割最后一个数都恰好在中间的位置,那么我们就有可能需要全部进行交换了! 资源分享 完整测试文件(C++版),文件名为:常见排序算法(重点),请关注我的个人公众号 (算法工程师之路),回复"左神算法基础CPP"即可获得,并实时更新!希望大家多多支持哦~

    61910发布于 2019-08-05
  • 来自专栏HelloCode开发者学习平台

    BAT面试算法进阶(2)-两数相加

    一.算法题 题目 You are given two non-empty linked lists representing two non-negative integers. 题目大意:给定2个非空链表来表示2个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字,将两数相加返回一个新的链表.你可以假设除了数字0之外,这2个数字都不会以零开头. 四.算法 就如同小学数学计算2个数相加一般,我们首先从低位有效位计算,也就是L1,L2的表头第一个位置开始相加.我们进行的十进制相加,所以当计算的结果大于9时,就会造成"溢出"的现象.例如5+7=12 五.伪代码 将当前的节点初始化为返回列表的哑节点 将进行carry设置为0 将p,q分别指向链表L1,L2的头部 遍历链表L1,L2直到尾部 将x设为节点的p值,如果p已经到达L1的末端,则将其值设置为 .上面的算法最多重复max(m,n)次 空间复杂度:O(max(m,n)), 新列表的长度最多max(m,n)+1 七.参考代码 ?

    54920发布于 2018-08-22
  • 来自专栏芋道源码1024

    算法面试之-如何准备算法面试

    主要介绍算法面试的一些问题、以及如何准备算法面试 算法面试不仅仅是正确的回答问题 对于面试中遇到的大多数问题,都能有一个合理的思考路径 什么是算法面试? 让大家在面对面试中的算法问题时,有一个合理的思考路径: 不代表能够“正确”回答每一个算法问题,但是合理的思考方向其实更重要,也是正确完成算法面试问题的前提 算法面试优秀不意味着技术面试优秀 技术面试优秀不意味着能够拿到 算法面试仍然是非常重要的一部分 如何准备算法面试 准备面试和准备算法面试 是两个概念 算法面试,只是面试中的一个环节。 基础算法:深度优先、广度优先、二分查找、递归… 基本算法思想:递归、分治、回溯搜索、贪心、动态规划… 例子 Intel的面试题: 初始序列为1 8 6 2 5 4 7 3的一组数采用堆排序,当建堆(小根堆 、3、5) D. (17、11、7、5、3、2) E. (17、7、11、3、5、2) F. (17、7、11、3、2、5) 百度面试题 在图采用邻接表存储时,求最小生成树的Prim算法的时间复杂度为(

    1.4K30发布于 2018-10-25
  • 来自专栏后端JavaEE

    面试2

    中间发生了什么事情):DNS解析服务 用户输入完地址掉下回车,先找域名对应服务,DNS,传ip,在请求URI,创建链接 ,三次握手,成功,客户端发送报文,建立http请求+springmvc执行流程,断开连接 2. 7.为什么写service不直接写实现类 解耦、异步开发,提高工作效率 8.开发中遇到了那些问题,与解决 ---- ---- ---- 002篇: 1.从数据库取值,服务器启动就加载这个值到内存 2. , 1 2

    54620发布于 2020-12-07
  • 来自专栏JavaEdge

    玩转算法面试(一)1算法面试意义234 优化算法

    1算法面试意义 否则就是普通快排即可 插入排序更佳 2 3 4 优化算法

    34620发布于 2018-08-22
  • 来自专栏机器学习AI算法工程

    算法工程师-机器学习面试题总结(2)

    优化算法用于找到使损失函数最小化的模型参数,常见的优化算法包括 1. 梯度下降(Gradient Descent):梯度下降是最基本的优化算法之一,通过计算损失函数关于参数的梯度方向进行参数更新。 2. 梯度下降的效率:逻辑回归常常使用梯度下降算法来优化模型参数。而梯度下降算法对于特征数值范围较大的情况可能收敛较慢,甚至可能无法收敛。 优点 (1)理论成熟简单,易于理解及算法实现; (2) 可以用于多分类分类、回归等; 缺点 (1)需要计算待分类样本与所有已知样本的距离,计算量大; (2)样本容量小或样本分布不均衡时,容易分类错误,后者可通过施加距离权重进行改善 ; K近邻(KNN)算法中的k值如何选取? Kd树的建树和搜索算法都可以通过递归实现,其中切分超平面的选择策略和距离计算方法具体取决于应用场景和算法设计。 支持向量机SVM 简单讲解SVM模型原理?

    98440编辑于 2023-09-04
  • 来自专栏技术总结

    算法2

    有两个算法 A 和 B ,假设两个算法的输入规模都是 n,算法 A 要做 2n+3 次操作,算法 B 要做 3n+1 次操作。觉得谁快?看下图: ? 而当 n = 2 时,两者效率相同;当 n > 2时,算法 A 就开始优于算法 B 了,随着 n 的增加, 算法 A 比算法 B 越来越好了,得出结论,算法 A 好过 算法 B 判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略 2、在修改后的运行次数函数中,只保留最高阶项。 3、如果最高阶项存在且不是1,则去除与这个项相乘的常数,得到的结果就是大O阶 3、常数阶 高斯算法,时间复杂度不是O(3),而是O(1)。 //第二种算法 int sum = 0, n = 100; /*执行1次*/ sum = (1 + n) * n/2; /*执行1次*/ printf( 也就是说,有多少个2相乘后大于n,则会退出循环。由2× = n ,得到 x = ㏒2n (2缩小)。所以这个循环的时间复杂度为O(㏒n)。

    1.1K90发布于 2018-05-22
  • 来自专栏京程一灯

    算法面试指南

    算法是技术面试的重要组成部分,尤其是在国内外的大厂中。本文将为你介绍在面试中需要了解的常见算法以及提高它们效率的方法(这是面试中常见的问题),最后会为你提供一些练习题。 找到算法的 Big O 复杂度 如果你在面试中被要求找到算法的 Big O 复杂性,这是一般的经验法则: 删除前导常数项 忽略低阶项 例:找到时间复杂度为 3n³ + 4n + 2算法的 Big O 花时间学习这些,因为你很有可能会在面试中用到其中一种或多种算法。 动态规划算法:一个孩子正在上 n 级楼梯,每次可以走 1 步,2 步或 3 步。实现一个函数,计算孩子上楼梯的可能方式。 总结 如果你要进行技术面试,必须为展示自己对各种算法的了解做好准备,并了解每种算法的复杂度。

    74120发布于 2020-05-11
  • 来自专栏互联网大杂烩

    算法面试

    面试的是BAT中某家的算法岗 1.快速排序 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试2.堆排序 1.堆 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]或者Key[i]>=Key[2i+1]&&key>=key 堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&key>=key[2i+2]称为大顶堆,满足 Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]称为小顶堆。 ,得到新的无序区(R1,R2….Rn-2)和新的有序区(Rn-1,Rn)。 2.你了解的数学模型? 3.讲一下K-means算法? 4.随机森林 5.灰色模型

    42920发布于 2018-08-22
  • 来自专栏E条咸鱼

    面试记录-2

    根本想不起来其他的) 说一下命令执行和代码执行的区别 命令执行就是执行操作系统的命令,代码执行就只是执行你那个语言的代码,比如php的话,需要用system才能执行系统的命令 不用工具,怎么判断一个xxx框架 当时面试不是这个问题

    81720发布于 2020-09-22
  • 来自专栏JAVA开发专栏

    软件设计师算法--常见算法,常见面试算法,经典面试算法

    一、排序简介 排序算法大体可分为两种: 1、比较排序,时间复杂度O(nlogn) ~ O(n^2),主要有:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。 2、非比较排序,时间复杂度可以达到O(n),主要有:计数排序,基数排序,桶排序等。二、冒泡排序法 算法思路: 1、比较相邻的元素。 编辑四、插入排序 算法思路: 1、从第一个元素开始,该元素可以认为已经被排序; 2、取出下一个元素,在已经排序的元素序列中从后向前扫描; 3、如果该元素(已排序)大于新元素,将该元素移到下一位置 编辑五、希尔排序 算法思路: 1、选择一个增量序列t1,t2,…,tk,其中ti>tj,tk=1; 2、按增量序列个数k,对序列进行k 趟排序; 3、每趟排序,根据对应的增量ti,将待排序列分割成若干长度为 若将两个有序表合并成一个有序表,称为2-路归并。 1、把长度为n的输入序列分成两个长度为n/2的子序列; 2、对这两个子序列分别采用归并排序; 3、将两个排序好的子序列合并成一个最终的排序序列。

    88361编辑于 2022-11-21
  • 来自专栏JAVA开发专栏

    软件设计师算法--常见算法,常见面试算法,经典面试算法

    ---- 介绍 最新准备考试软件设计师,需要专门学习一下算法的基础,以及常见算法学习,特意写了这篇博客,所有算法都已在IDEA上面调试过了,没有问题。 编辑 一、排序简介 排序算法大体可分为两种: 1、比较排序,时间复杂度O(nlogn) ~ O(n^2),主要有:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。 2、非比较排序,时间复杂度可以达到O(n),主要有:计数排序,基数排序,桶排序等。 二、冒泡排序法 算法思路: 1、比较相邻的元素。 编辑 四、插入排序 算法思路: 1、从第一个元素开始,该元素可以认为已经被排序; 2、取出下一个元素,在已经排序的元素序列中从后向前扫描; 3、如果该元素(已排序)大于新元素,将该元素移到下一位置 编辑 五、希尔排序 算法思路: 1、选择一个增量序列t1,t2,…,tk,其中ti>tj,tk=1; 2、按增量序列个数k,对序列进行k 趟排序; 3、每趟排序,根据对应的增量ti,将待排序列分割成若干长度为

    37310编辑于 2023-07-15
  • 来自专栏全栈程序员必看

    Java 面试算法

    排序算法   名词解释: n: 数据规模 k: “桶”的个数 In-place: 占用常数内存,不占用额外内存 Out-place: 占用额外内存 快排的Partition函数与归并的Merge函数

    36030编辑于 2022-09-09
  • 来自专栏XINDOO的专栏

    大厂面试题:求根号2简单?高级算法你肯定不会

    前两天逛github看到一道很简单的面试题——如何不用库函数快速求出\sqrt2的值,精确到小数点后10位! 第一反应这不很简单嘛,大学数据结构课讲二分查找的时候老师还用这个做过示例。 但转念一想,能作为大厂的面试题,背后绝对没有那么简单,于是我google了下,结果找到了更巧妙的数学方法,甚至发现了一件奇闻趣事…… 一道简简单单的面试题,不仅能考察到候选人的编程能力,还能间接考察到候选人的数学素养 实际我目前没有找到比牛顿迭代又好又快的算法了,但是我找到一个相关的故事,以及它引出的以牺牲精度换取速度求\frac{1}{\sqrt{x}}的神奇算法,当然它也可以用来求\sqrt2。 其实这个算法就是牛顿迭代单次的近似解法,具体证明请看卡马克快速平方根倒数算法,它能以几十倍的速度优势秒杀其他算法,要知道几十年前的CPU速度可远不及现在的,速度就是绝对优势。 开始大家都以为这个算法是游戏的开发者Carmack发现的,但后来调查发现,该算法在这之前就在计算机图形学的硬件与软件领域中有所应用,如SGI和3dfx就曾在产品中应用此算法,所以至今都无人知晓这个算法是谁发明的

    2.2K10发布于 2021-01-22
  • 来自专栏大数据学习笔记

    面试算法

    sb)); } } 3、单链表逆序的递归算法 package test; public class LinkList { static class ListNode { }else if(array[mid]<array[high]){ high=mid;//不是mid-1 }else{//相等情况, [2,1,2,2,2,2,2 ] 或者[2,2,2,2,2,1,2] high--; //无法判定在左还是在右 } } return array int[] b={3,4,5,1,2}; int[] c={2,1,2,2,2,2,2}; System.out.print(minNumberInRotateArray +f(0) 所以,f(n)=2f(n-1) 初始值 f(0)=0 f(1)=1 f(2)=2 所以,f(n)=2f(n-1)=22f(n-2)=..=2n-1f(n-(n-1))=2n-

    2.5K71发布于 2018-01-02
  • 来自专栏饶文津的专栏

    面试算法

    return 0; } 2. 求长度为 2n 的字典序第 k 大的合法括号序列,合法是符合下面两个要求: 1)空串 2)若 s 合法,()s、(s)也合法 思路是长度为2i的合法序列有\(2^{i-1}\)个,所以可以递归构造。 如果\(2^{n-2} > k\),说明一定是()开头,再去构造长度为2(n-1)的第 k 大序列。否则,一定是(s)构成,再去构造长度为2(n-1)的第 \(k-2^{n-2}\)大的序列。 5. 用小根堆优化 prim 算法。 LRUCache(LeetCode146) 面试完才知道这是道经常考的面试题,有原题,只不过把键值都改为字符串。 当时写的 bug 太多了,对链表的操作也没有抽出函数来。回来又改了好久才 AC。

    50310发布于 2020-06-02
  • 来自专栏CSDN技术头条

    征战 BAT 算法面试

    对于机器学习的初学者来说,面试方面的经验总结也非常重要。能够加深对算法和机器学习基本理论的理解。 所以,本文网罗了多年来 BAT 的面试真题,能搞懂这些面试题加上多次反复研习知识,在 BAT 面试初中级算法时就轻松多了(前提是企业比较看重面试算法能力)。 一、算法面试注意细节 算法工程师岗位(机器学习、数据挖掘、数据分析等)面试主要包含两大块: 首先,基本的 Coding 能力; 其次,机器学习算法的理论与应用能力。 机器学习算法理论与应用能力不讲,单就面试来看,本文就够了。当然师父领进门,修行在个人,想要在这方面深造,还需要大量实践和广泛的学习优秀论文及开源源代码。 二、算法面试常见问题 1. 模型融合方法有哪些 主要有以下几个: Voting Averaging Bagging Boosting Stacking 2.

    62510发布于 2018-10-25
  • 来自专栏AngelNI

    排序算法-2

    start++] =arr[p]; } } void mergesort(ll *A,ll start,ll end) { if(start<end) { ll mid = (start+end)/2; = a[i]; a[i] = a[j]; a[j] = t; } void heapify(ll *tree,ll n,ll i) { if(i>=n) return ; ll c1 = 2* i+1; ll c2 = 2*i+2; ll max = i; if(c1<n&&tree[c1]>tree[max]) { max = c1; } if(c2<n&&tree[c2]> tree[max]) { max = c2; } if(max ! = i) { swap(tree,max,i); heapify(tree,n,max); } } void heapsort(ll *a,ll n) { for(ll i =n/2-1;

    30610发布于 2020-04-14
  • 来自专栏修也的进阶日记

    算法手记2

    NC296 最小花费爬楼梯 牛客网题目链接(点击即可跳转):NC296 最小花费爬楼梯 题目详情: 本题详情如下图: 题目思路: 本题解题思路如下: 基础动态规划,1.写出动态转换方程2. vector<int>& cost) { vector<int> dp; dp.resize(cost.size()+1); for(int i=2; i<=cost.size();i++) dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]); return dp[cost.size ()]; } }; 结语 说点啥好呢...不断修补细节然后提高效率,不断学习算法并应用出肌肉记忆.

    13200编辑于 2025-03-14
  • 来自专栏Article

    算法 Day 2

    冒泡排序 平均时间复杂度 O(n2) 空间复杂度 O(1) function bubbleSort(arr) { var i = arr.length; var position =

    13010编辑于 2022-06-14
领券