IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 面试官最最最常问的几种算法(Java实现) -> 正文阅读

[数据结构与算法]面试官最最最常问的几种算法(Java实现)

算法的概念

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。

  • 描述:算法是一种解决特定问题的思路
  • 常见算法:
    在这里插入图片描述

递归

概念
递归,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。也就是说,递归算法是一种直接或者间接调用自身函数或者方法的算法。

递归三要素

  • 递归结束条件:既然是循环就必须要有结束,不结束就会OOM了
  • 函数的功能:这个函数要干什么,打印,计算…
  • 函数的等价关系式:递归公式,一般是每次执行之间,或者与个数之间的逻辑关系

Demo案例

/**
 * @Description: 打印5次”Hello World“
 * @title: PrintHelloWorld
 * @Author szh
 * @Date: 2022/1/7 22:35
 * @Version 1.0
 */
public class PrintHelloWorld {

    //递归实现
    public static void print(String ss, int n) {
        //递归条件
        if(n>0){
            //函数的功能
            System.out.println(ss);
            //函数的等价关系式
            print(ss,n-1);
        }
    }
    public static void main(String[] args) {
        //调用递归  
        print("Hello World", 5);
    }
}

/**
 * @Description: 斐波那契数列:0、1、1、2、3、5、8、13、21、34、55.....
 * @title: FibonacciSequenceTest
 * @Author szh
 * @Date: 2022/1/7 22:38
 * @Version 1.0
 */
public class FibonacciSequenceTest {

    //递归实现 -> 函数的等价关系式:fun(n)=fun(n-1)+fun(n-2)
    public static int fun2(int n) {
        if (n <= 1) return n;
        return fun2(n - 1) + fun2(n - 2);
    }

    public static void main(String[] args) {
        System.out.println(fun2(9));
    }
}

规律:从第3个数开始,每个数等于前面两个数的和递归分析:函数的功能:返回n的前两个数的和递归结束条件:从第三个数开始,n<=2函数的等价关系式:fun(n)=fun(n-1)+fun(n-2)

分治算法

概念
分治算法(divide and conquer)的核心思想其实就是四个字,分而治之 ,也就是将原问题划分成 n个规模较小,并且结构与原问题相似的子问题,递归地解决这些子问题,然后再合并其结果,就得到原问题的解。
关于分治和递归的区别
分治算法是一种处理问题的思想,递归是一种编程技巧
分治算法的递归实现中,每一层递归都会涉及这样三个操作:

  • 分解:将原问题分解成一系列子问题
  • 解决:递归地求解各个子问题,若子问题足够小,则直接求解
  • 合并:将子问题的结果合并成原问题

Demo案例:
将字符串中的小写字母转化为大写字母“abcde”转化为"ABCDE"
利用分治的思想将整个字符串转化成一个一个的字符处理
在这里插入图片描述

/**
 * @Description:  字符串小写字母转大写字母---分治算法
 * @title: CharUpCase
 * @Author szh
 * @Date: 2022/1/7 22:53
 * @Version 1.0
 */
public class CharUpCase {

    public static char[] toUpCase(char[] arr,int i){
        //递归结束条件
        if(i>=arr.length){
            return arr;
        }
        arr[i]=toUpCaseUnit(arr[i]);
        return toUpCase(arr,i+1);
    }

    /**
     * 单元方法 小写转大写
     * @param a
     * @return
     */
    private static char toUpCaseUnit(char a){
        //不是字母
        if((int)a<97||(int)a>122){
            return ' ';
        }
        return  (char)Integer.parseInt(String.valueOf((int)a-32));
    }

    public static void main(String[] args) {
        char[] arr=toUpCase("abcdde".toCharArray(),0);
        System.out.println(arr);
    }
}

/**
 * @Description: 求x的n次方问题
 * @title: Pow
 * @Author szh
 * @Date: 2022/1/7 23:03
 * @Version 1.0
 */
public class Pow {

    public static int dividpow(int x,int n){

        //递归结束 任何数的1次方都是它本身
        if(n==1){
            return x;
        }

        //每次分拆成幂的一半
        int half=dividpow(x,n/2);
        //偶数          
        if(n%2==0){
            return half*half;
        } else {
            return half*half*x;
        }
    }

    public static void main(String[] args) {
        System.out.println(dividpow(2,10));
    }
}

贪心算法

回溯算法

动态规划

0-1背包问题

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-01-08 14:16:53  更:2022-01-08 14:19:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 18:51:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码