首页 > 编程语言 >常见的算法题

常见的算法题

时间:2024-05-30 11:34:03浏览次数:19  
标签:Node node arr return int 常见 算法 public

冒泡排序

private static int[] queryArr(int[] arr1) {

int len = arr1.length;

if (len == 0 || len == 1){

return arr1;

}

        for (int i = 0; i < len; i++) {

            for (int j = 0,lenArr = len - 1 - i; j < lenArr; j++) {

                if (arr1[j + 1] < arr1[j]){

                int b = arr1[j + 1];

                arr1[j + 1] = arr1[j];

                arr1[j] = b;

            }

        }

    }

    return arr1;

}

插入排序

public static void insertionSort(int[] arr) {

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

        int current = arr[i];

        int j = i - 1;

        // 将当前元素与已排序序列的元素进行比较,如果当前元素较小,则将已排序序列的元素向后移动

        while (j >= 0 && arr[j] > current) {

            arr[j + 1] = arr[j];

            j--;

        }

        // 将当前元素插入到正确的位置

        arr[j + 1] = current;

    }

}

二分查找

private static int getArrIndex(int[] arr, int key) {

        int low = 0;

        int high = arr.length - 1;

        int middle = 0;

        if (key < arr[low] || key > arr[high] || low > high){

            return -1;

        }

        while (low <= high){

            middle = (low + high) / 2;

            if (arr[middle] > key){

                high = middle - 1;

            }else if (arr[middle] < key){

                low = middle + 1;

            }else {

                return middle;

            }

        }

        return -1;

    }

链表反转

/**

 * 节点类

 */

public class Node {

    public final int data; // 数据域

    public Node next; // 引用域

    public Node(int data) {

        this.data = data;

        this.next = null; // 引用类型,默认null

    }

    public Node getNext() {

        return next;

    }

    public void setNext(Node next) {

        this.next = next;

    }

}

//测试类

public static Node head;

    public static void main(String[] args) {

        //创建链表

        Node node1 = new Node(13);

        Node node2 = new Node(2);

        Node node3 = new Node(5);

        node1.next = node2;

        node2.next = node3;

        head = node1;

        // 链表创建后, 打印链表

        printLinkList(head);

        System.out.printf("开始反转链表");

        Node reverserNode = reverserLinkedList(head);

        //打印反转的

        printLinkList(reverserNode);

    }

    // 打印链表

    public static void printLinkList(Node node) {

        System.out.println("开始打印head");

        while (node != null) {

            System.out.println(node.data + "");

            node = node.next;

        }

    }

    /**

     * 递归反转链表

     * 这个递归,返回值只是为了控制返回的是最后一个节点

     * 然后通过递归, 通过栈的特性, 这里就是让它可以从最后一个节点开始把自己的子节点的子节点改成自己

     * 自己子节点改成null

     * @param node

     * @return

     */

    public static Node reverserLinkedList(Node node) {

        if (node == null || node.getNext() == null) {

            return node;

        }

        Node nextNode = reverserLinkedList(node.getNext());

        node.getNext().setNext(node);

        node.setNext(null);

        return nextNode;

}

青蛙跳台阶

public static int numWays(int n) {

        if (n <= 1) {

            return 1;

        }

        // dp[i] 表示跳到第 i 个台阶的方法数

        int[] dp = new int[n + 1];

        dp[0] = 1; // 第0个台阶只有1种跳法

        dp[1] = 1; // 第1个台阶也只有1种跳法

        for (int i = 2; i <= n; i++) {

            // 从第i-1个台阶跳1个台阶或者从第i-2个台阶跳2个台阶到达第i个台阶

            dp[i] = dp[i - 1] + dp[i - 2];

       }

     return dp[n];

}  

标签:Node,node,arr,return,int,常见,算法,public
From: https://blog.csdn.net/m0_72583612/article/details/139319353

相关文章

  • 基于Matlab OMP和KSVD算法的彩色图像修复
    欢迎大家点赞、收藏、关注、评论啦,由于篇幅有限,只展示了部分核心代码。文章目录一项目简介二、功能三、系统四.总结一项目简介  一、项目背景与意义在数字图像处理领域,图像修复技术一直是一个重要的研究方向。彩色图像修复旨在恢复图像中由于各种原因(如划......
  • 【教程】宝塔面板常见问题 解决方法
    如何解决宝塔面板诡异MYSQL自动停止问题在使用宝塔的过程中,经常会遇到了MySQL自动停止的问题,尤其是配置低一些的服务器。导致MySQL停止的情况有很多种,这里不再多述。下面教大家怎么解决这一问题。在宝塔的计划任务里添加一段shell命令,从而达到定时自动执行检测MySQL......
  • React中常见的面试题
    本文是结合实践中和学习技术文章总结出来的笔记(个人使用),如有雷同纯属正常((✿◠‿◠))喜欢的话点个赞,谢谢!1.约束性组件与非约束性组件1.1.非约束性组件非约束性组件其实就是不能控制状态的组件,比如:<inputtype="text"defaultValue="123"onChange={handleChange......
  • 十四.吊打面试官系列-JVM优化-JVM垃圾回算法详解
    前言说到JVM不可避免的会聊到垃圾回收器,(GarbageCollection,简称GC)。它负责跟踪哪些对象仍然在使用,哪些对象已经不再被引用,并释放那些不再被引用的对象所占用的内存空间。这一过程涉及到对象的标记、清除、压缩等多个阶段,每个阶段都有其特定的算法和策略。随着Java技术的不......
  • 基于二维CS-SCHT变换和扩频方法的彩色图像水印嵌入和提取算法matlab仿真
    1.算法运行效果图预览   2.算法运行软件版本matlab2022a 3.算法理论概述水印嵌入原理   水印提取原理: 将嵌入水印的图像再次进行二维CS-SCHT变换。 提取变换后的低频系数,并按照嵌入时的规则去除宿主图像内容的影响,恢复出水印信息Wm′​。  ......
  • C语言实现排序之冒泡排序算法
    1.代码#include<stdlib.h>#include<stdio.h>#include<time.h>//函数声明//创建并生成一个包含随机数的数组,数组大小由参数size指定int*create_and_generate_random_array(intsize);//打印数组内容,参数array是数组指针,size是数组大小voidprint_array(int*arr......
  • C语言实现排序之选择排序算法
    1.代码#include<stdlib.h>#include<stdio.h>#include<time.h>//函数声明int*create_and_generate_random_array(intsize);voidprint_array(int*array,intsize);voidselection_sort(int*array,intsize);intgenerate_random_size();intm......
  • 代码随想录算法训练营第第22天 | 235. 二叉搜索树的最近公共祖先 、701.二叉搜索树中
    二叉搜索树的最近公共祖先相对于二叉树的最近公共祖先本题就简单一些了,因为可以利用二叉搜索树的特性。题目链接/文章讲解:https://programmercarl.com/0235.二叉搜索树的最近公共祖先.html视频讲解:https://www.bilibili.com/video/BV1Zt4y1F7ww/***@param{TreeNode}......
  • 哈希算法教程(个人总结版)
    背景哈希算法(HashAlgorithm)是一种将任意长度的输入(也称为消息)转换为固定长度的输出(也称为哈希值、散列值、摘要)的算法。哈希算法在计算机科学中有着广泛的应用,包括数据存储、数据检索、数据完整性验证、密码学等。哈希算法的关键特性确定性:相同的输入总是产生相同的输出。......
  • 随机森林算法教程(个人总结)
    背景随机森林(RandomForest)是一种集成学习方法,主要用于分类和回归任务。它通过构建多个决策树并将其结果进行集成,提升模型的准确性和鲁棒性。随机森林在处理高维数据和防止过拟合方面表现出色,是一种强大的机器学习算法。随机森林的基本思想随机森林由多个决策树组成,每棵树在......