首页 > 编程语言 >算法笔试题面试题

算法笔试题面试题

时间:2024-09-29 17:35:24浏览次数:8  
标签:面试题 return int 笔试 arr 算法 static 排序 public

算法笔试面试

十大排序算法:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序、希尔排序、计数排序,基数排序,桶排序。

ps:重点在理解原理,写代码的时候要由里往外写。

冒泡排序:

思想:两个相邻的元素比较并交换。

 public static void bubbleSort(int[] arr) {
        if(arr.length == 0){
            return;
        }

        // 一共进行元素-1次排序
        for (int i = 0; i < arr.length -1; i++) {
            // 只需要对没有排序的进行排序
            for (int j = 0; j < arr.length - 1 - i; j++) {
                //将前一个比后一个大的两元素进行交换
                if (arr[j+1] < arr[j]) {
//                    int tmp = arr[j+1];
//                    arr[j+1] = arr[j];
//                    arr[j] = tmp;
                    int tmp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp;
                }
            }
        }

    }

    public static void main(String[] args) {
        int arr[] = {5, 8, 6, 3, 9, 2, 1, 7};
        bubbleSort(arr);
        System.out.println(Arrays.toString(arr));
    }

选择排序

思想:每次从剩余元素中找最大(最小)元素进行交换。

public static void selectSort(int[] arr) {
    if(arr.length == 0){
        return;
    }

    // 升序
    // 用于记录最小元素的下标位置
    for (int j = 0; j < arr.length; j++) {
        int index = j;

        for (int i = index; i < arr.length -1; i++) {

            if(arr[index] > arr[i+1]){
                index = i+1;
            }

        }

        // 找到了最小元素的位置之后,进行元素的交换
        int tmp = arr[j];
        arr[j] = arr[index];
        arr[index] = tmp;

        System.out.println(Arrays.toString(arr));
    }

}

public static void main(String[] args) {
    int arr[] = {5, 8, 6, 3, 9, 2, 1, 7};
    selectSort(arr);
    System.out.println(Arrays.toString(arr));
}

插入排序

对于基本有序的数组来说最好用。

思想:就好像是打麻将或者是玩扑克牌。只不过略微有点区别。

public static void insertSort(int[] arr) {
    if(arr.length == 0){
        return;
    }

    for (int i = 1; i < arr.length; i++) {


        for (int j = i ; j >0; j--) {

            if(arr[j ] < arr[j - 1]){
                int tmp = arr[j];
                arr[j] =  arr[j - 1];
                arr[j - 1] = tmp;

            }

        }
        System.out.println(Arrays.toString(arr));
    }

}

public static void main(String[] args) {
    int arr[] = {5, 8, 6, 3, 9, 2, 1, 7};
    insertSort(arr);
    System.out.println(Arrays.toString(arr));

}

爬楼梯

方法一:递归解法

public static int climbStairs(int n) {
    if(n == 0){return 0;}
    if(n == 1){return 1;}
    if(n == 2){return 2;}
    return climbStairs(n-1) + climbStairs(n-2);
}

public static void main(String[] args) {
    System.out.println(climbStairs(3));

}

以上的解法存在重复计算的问题,我们可以使用hashmap集合来保存我们已经计算过的结果。

private static HashMap<Integer,Integer> map = new HashMap();

public static int climbStairs2(int n) {
    if(n == 0){return 0;}
    if(n == 1){return 1;}
    if(n == 2){return 2;}

    if(null != map.get(new Integer(n))){
        return map.get(new Integer(n));
    }

    int reslut = climbStairs(n-1) + climbStairs(n-2);
    map.put(new Integer(n),reslut);

    return reslut;
}

标签:面试题,return,int,笔试,arr,算法,static,排序,public
From: https://www.cnblogs.com/dongyaotou/p/18440458

相关文章

  • 算法备案未通过三个常见原因
    进行算法备案,是企业遵循国家监管要求的必要合规举措。下文将为各位AI创业者和企业分享算法备案不通过的三个常见原因:1. 忽视数据安全与合规随着《数据安全法》与《个人信息保护法》的颁布,企业肩负起前所未有的重任——确保数据从采集到使用的每一步都合乎法律规范。算法的......
  • 2024-25互联网大厂资深自动化测试&测试开发精选面试题
    自动化测试与测试开发成为了大厂招聘的热门岗位之一。作为测试开发的核心岗位之一,掌握相关技术并通过高难度的面试成为每一个技术人的必经之路。本文探讨如何利用精选的面试题、巧妙的备考策略,成功迈入梦想中的大厂。主要针对了各类常见框架,如TestNG、Python编程、Linux、数据......
  • 哨兵节点:思想简单,效果很棒的编程算法
    以下文章来源于IOT物联网小镇,作者道哥别人的经验,我们的阶梯!今天和同事一起调代码,定位到一处很耗时的地方。在某个线程中,同步周期需要保证在2毫秒(如果耗时不到2毫秒,那么就让剩下的时间进行sleep)。但是在调用一个模块的内部函数时,时不时的就飘到了3~5毫秒,时间抖动毫无保证。......
  • 代码随想录算法训练营第四天|24. 两两交换链表中的节点,19.删除链表的倒数第N个节点,面
    24.两两交换链表中的节点文章链接:https://programmercarl.com/0024.两两交换链表中的节点.html#思路视频讲解:https://www.bilibili.com/video/BV1YT411g7br代码链接:https://leetcode.cn/problems/swap-nodes-in-pairs/此题注意点:注意由于交换节点,head已经变换了位置,故最终......
  • 代码随想录算法训练营Day16 | 513.找树左下角的值、112.路径总和、113.路径总和Ⅱ、10
    目录513.找树左下角的值112.路径总和113.路径总和Ⅱ106.从中序与后序遍历序列构造二叉树105.从前序与中序遍历序列构造二叉树513.找树左下角的值题目513.找树左下角的值-力扣(LeetCode)给定一个二叉树的根节点root,请找出该二叉树的最底层最左边节点的值。假......
  • 经典强化学习算法:分层强化学习算法—options算法2(理解篇)
    论文地址:https://people.cs.umass.edu/~barto/courses/cs687/Sutton-Precup-Singh-AIJ99.pdf例子:这是一个寻路问题,该问题使用强化学习算法解决,准确的来说是使用“表格表示的强化学习算法中的规划算法”来进行解决的;之所以没有说是使用规划算法来说是因为这里使用了学习型......
  • 深度DFS 和 广度BFS搜索算法学习
    深度DFS和广度BFS搜索算法学习 目录广度优先的动态图深度优先的动态图广度和深度的具体步骤深度和广度的应用场景 图的两种遍历方式:深度优先遍历(DFS——DepthFirstSearch)广度优先遍历(BFS——BreathFirstSearch)图的遍历算法里,处理临时数据,依赖两个抽象......
  • 使用表格型强化学习算法解决寻路问题的两种建模方式
    寻路问题示意图:(只有目标点形式的示意图)寻路问题示意图:(带有目标点和起始点形式的示意图,红色位置为起始点,黑色位置为目标点)解决强化问题首先需要建模,只有把目标问题建立为强化学习模型后才能使用强化学习算法进行解决;在这一过程中我们在建立强化学习模型(指定环境,状态迁移函......
  • 关于聚类算法的一份介绍
    在这篇文章中我将介绍无监督算法中“聚类”部分的知识,其中关于K均值聚类、层次聚类、密度聚类部分我将各附上一份实际运用的代码,而其余的像学习向量量化、高斯混合聚类部分则只是简单介绍下概念。一、关于聚类首先我先简单介绍下聚类算法有关的东西。1.1聚类任务我们知道......
  • 搜索:如何用 A*搜索算法实现游戏中的寻路功能?
    搜索:如何用A*搜索算法实现游戏中的寻路功能?在游戏开发中,寻路功能是一个非常重要的部分。它可以让游戏中的角色自动找到从一个位置到另一个位置的最佳路径。A搜索算法是一种常用的寻路算法,它可以在复杂的地图环境中快速找到最短路径。本文将详细介绍如何用A搜索算法实现游......