几个面试常见算法

1、选择排序

基本思路:选择某个索引位置的元素,然后和后面元素依次比较,若大于则交换位置,经过第一轮比较排序后可得出最小值,然后使用同样的方法把剩下的元素逐个比较即可。

static void selectSort(int[] arry){
  for(int times = 0; times <arry.length - 1; times ++){
    int minIndex = times;
    for(int i = times + 1; i < arry.length; i ++){
      if(arry[i] < arry[minIndex]){
        minIndex = i;
      }
    }
    swap(arry,times,minIndex); // 每一轮结束后才调换位置
  }
}

2、冒泡排序

基本思路:对未排序的各元素从头到尾依次比较相邻的两个元素大小关系,若大于则交换位置,经过第一轮比较排序后可得出最大值,然后使用同样的方法把剩下的元素逐个比较即可。

static void bubbleSort(int[] arry){
  int temp = 0;
  for(int j = 0; j < arry.length -1; j++){
    for(int i = 1; i < arry.length -j; i++){
         if(arry[i-1] > arry[i]){
        temp = arry[i-1];
              arry[i-1] = arry[i];
              arry[i] = temp;
           }
        }
    }
}

3、二分查找

当数据量很大适宜采用该方法;采用二分法查找时,数据需是排好序的。为了更好的理解算法,下面用一个游戏来举例。

猜数游戏: 一个朋友让你猜他正在想的一个从1到100之间的数,等你猜了,他会告诉你三种结果中的一个:你猜的比他想的大,或小,或猜中了。 为了能用最少的次数猜中,必须从50开始猜。如果他说你猜的小了,那么就能推出哪个数在50到100之间,所以马上猜75。但如果他说猜大了,你也能明白哪个说在1到50之间,所以马上猜25。如此重复,范围越来越小,直到猜到为止。

static int binarySearch(int[] arry, int key){
  int low = 0;                        // 最低索引
  int high = arry.length;             // 最高索引
    while(low <= high){                 // 最低索引不能高于最高索引
      int mid = (low + high) >> 1;    // 中间索引
        if(arry[mid] < key)             // key值位于大值半区
          low = mid + 1;              // 将最低索引设置为中间索引+1
        else if(arry[mid] > key)        // key值位于小值半区
          high = mid - 1;             // 将最高索引设置为中间索引-1
        else
          return mid;
    }
    return -1;}
时间: 2024-10-06 10:15:30

几个面试常见算法的相关文章

面试常见算法-排序查找算法

算法是程序员必被的一个技能,在面试中常常出现,下面总结了面试中出现的常见算法,这些算法程序员应该牢记在心中,要非常熟练. 插入排序算法 原理:将数组分为无序区和有序区两个区,然后不断将无序区的第一个元素按大小顺序插入到有序区中去,最终将所有无序区元素都移动到有序区完成排序. 要点:设立哨兵,作为临时存储和判断数组边界之用. public class InsertSort { private static void insertSort(int[] a) { int j; int tmp; for

面试常见算法

目录 位运算 计算汉明重量 判断奇偶数 二分查找 不用递归 递归 常见排序 快速排序 冒泡排序 二叉树 先序遍历 递归实现 非递归实现 中序遍历 递归实现 非递归实现 后序遍历 递归实现 非递归实现 层叠遍历 参考:奇舞周刊 位运算 汉明距离 两个等长的字符串对应位置上的字符不同的个数 汉明重量 他是一个特殊的汉明距离,指一个字符串中非零字符的个数 计算汉明重量 function hanmingWeight(n) { let num = 0; while(n !== 0) { n &= (n-1

jquery面试常见技术问题

面试常见技术问题 ------------           JQ           -----------1.jq常见选择器? ,号选择器,分组选择器.空格,祖父选择器.>大于号,父子选择器.+号选择器,紧接下一个兄弟选择器.~号,元素之后所有的siblings元素. :first,:last,:not,:first-child,:last-child,:animated.:checked 2. jQuery插件实现方式,分别介绍? jQuery.fn.extend 封装直接在$下面的方法

机器学习常见算法优缺点总结

机器学习常见算法优缺点总结 K近邻:算法采用测量不同特征值之间的距离的方法进行分类. 优点: 1.简单好用,容易理解,精度高,理论成熟,既可以用来做分类也可以用来做回归: 2.可用于数值型数据和离散型数据: 3.训练时间复杂度为O(n):无数据输入假定: 4.对异常值不敏感 缺点: 1.计算复杂性高:空间复杂性高: 2.样本不平衡问题(即有些类别的样本数量很多,而其它样本的数量很少): 3.一般数值很大的时候不用这个,计算量太大.但是单个样本又不能太少 否则容易发生误分. 4.最大的缺点是无法给

字符串匹配常见算法(BF,RK,KMP,BM,Sunday)

今日了解了一下字符串匹配的各种方法. 并对sundaysearch算法实现并且单元. 字符串匹配算法,是在实际工程中经常遇到的问题,也是各大公司笔试面试的常考题目.此算法通常输入为原字符串(string)和子串(pattern),要求返回子串在原字符串中首次出现的位置.比如原字符串为"ABCDEFG",子串为"DEF",则算法返回3.常见的算法包括:BF(Brute Force,暴力检索).RK(Robin-Karp,哈希检索).KMP(教科书上最常见算法).BM(

LeetCode面试常见100题( TOP 100 Liked Questions)

LeetCode面试常见100题( TOP 100 Liked Questions) 置顶 2018年07月16日 11:25:22 lanyu_01 阅读数 9704更多 分类专栏: 面试编程题真题合集 常见算法问题 LeetCode试题 LeetCode常见试题 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/lanyu_01/article/details/81062232 这篇文章

acm常见算法及例题

转自:http://blog.csdn.net/hengjie2009/article/details/7540135 acm常见算法及例题 初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法

程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大系列集锦

程序员面试.算法研究.编程艺术.红黑树.数据挖掘5大系列集锦

机器学习常见算法分类汇总

机器学习常见算法分类汇总 机器学习无疑是当前数据分析领域的一个热点内容.很多人在平时的工作中都或多或少会用到机器学习的算法.这里 IT 经理网为您总结一下常见的机器学习算法,以供您在工作和学习中参考. 机器学习的算法很多.很多时候困惑人们都是,很多算法是一类算法,而有些算法又是从其他算法中延伸出来的.这里,我们从两个方面来给大家介绍,第一个方面是学习的方式,第二个方面是算法的类似性. 学习方式 根据数据类型的不同,对一个问题的建模有不同的方式.在机器学习或者人工智能领域,人们首先会考虑算法的学习