Java学习笔记(16)

常见算法

查找算法

查询某个元素是否存在

二分查找(数组元素必须是有序的)

package exercise;public class exercise1 {public static void main(String[] args) {int[] arr = {7, 23, 797, 23, 79, 81, 103, 127, 131, 147};System.out.println(binarySearch(arr, 131));}public static boolean binarySearch(int[] arr, int num) {int min = 0;int max = arr.length - 1;while (min <= max) {int mid = (max + min) / 2;if (num > arr[mid]) {min = mid + 1;} else if (num < arr[mid]) {max = mid - 1;} else {return true;}}return false;}
}

插值查找

二分查找优化

适合数据分布比较均匀的情况

斐波那契查找

根据黄金分割点查找

分块查找

有一定规律

定义块类

分块查找

无规律

每个块内的数字范围没有交集

哈希查找

排序算法

冒泡排序

要点

public static int[] maoPao(int[] arr) {for (int i = 0; i < arr.length - 1; i++) {for (int j = 0; j < arr.length - 1 - i; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}return arr;
}

选择排序

public static int[] selection(int[] arr) {for (int i = 0; i < arr.length - 1; i++) {for (int j = i +1; j < arr.length; j++) {if (arr[i] > arr[j]) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}}return arr;
}

插入排序

public static int[] insert(int[] arr) {int startIndex = -1;for (int i = 0; i < arr.length - 1; i++) {if (arr[i] > arr[i + 1]) {startIndex = i + 1;break;}}for (int i = startIndex; i < arr.length; i++) {int j = i;while (j > 0 && arr[j] < arr[j - 1]) {int temp = arr[j];arr[j] = arr[j - 1];arr[j - 1] = temp;j--;}}return arr;}

快速排序

递归算法

自己调用自己的方法

心得:方法内部再次调用方法的时候,参数必须要更加的靠近出口

Return返回的结果是给调用者的

.

public static void quickSort(int[] arr, int i, int j) {//定义两个变量记录要查找的范围int start = i;int end = j;if(start > end){//递归的出口return;}//记录基准数int baseNumber = arr[i];//利用循环找到要交换的数字while(start != end){//利用end,从后往前开始找,找比基准数小的数字//int[] arr = {1, 6, 2, 7, 9, 3, 4, 5, 10, 8};while(true){if(end <= start || arr[end] < baseNumber){break;}end--;}System.out.println(end);//利用start,从前往后找,找比基准数大的数字while(true){if(end <= start || arr[start] > baseNumber){break;}start++;}//把end和start指向的元素进行交换int temp = arr[start];arr[start] = arr[end];arr[end] = temp;}//当start和end指向了同一个元素的时候,那么上面的循环就会结束//表示已经找到了基准数在数组中应存入的位置//基准数归位//就是拿着这个范围中的第一个数字,跟start指向的元素进行交换int temp = arr[i];arr[i] = arr[start];arr[start] = temp;//确定6左边的范围,重复刚刚所做的事情quickSort(arr,i,start - 1);//确定6右边的范围,重复刚刚所做的事情quickSort(arr,start + 1,j);}

可不可以先移动start指针再移动end指针呢?

如果先移动start,则有可能把一个大于基准数的元素移动到前面去

所以要先移动end,这样就可以保证要把一个小于基准数的元素移动到前面去

Arrays

二分查找有细节

拷贝数组

默认是升序

排序重载

Sort(数组,排序顺序)

只能给引用数据类型排序

O1 - o2 升序

O2 - o1 降序

Lambda

简化匿名内部类

函数式编程

JDK8开始有的

0

只能是只有一个抽象方法的接口才可以用这个lambda

可以用@FunctionalInterface来判断

练习

package exercise;import java.util.Arrays;public class exercise8 {public static void main(String[] args) {Girl girl1 = new Girl("sdf", 22, 160);Girl girl2 = new Girl("dc", 22, 162);Girl girl3 = new Girl("sdc", 22, 160);Girl[] girlsArr = {girl1, girl2, girl3};Arrays.sort(girlsArr, (o1, o2) -> {if (o1.getAge() != o2.getAge()) {return o1.getAge() - o2.getAge();}if (o1.getHeight() != o2.getHeight()) {return o2.getHeight() - o1.getHeight();}return o1.getName().compareTo(o2.getName());});System.out.println(Arrays.toString(girlsArr));}
}

斐波那契数列

package exercise;public class exercise9 {public static void main(String[] args) {System.out.println(rabbit(12));}public static int rabbit(int month) {if (month == 1 || month == 2) {return 1;}return rabbit(month - 1) + rabbit(month - 2);}
}

反向递归
package exercise;public class exercise10 {public static void main(String[] args) {System.out.println(peach(1));}public static int peach(int day) {if (day == 10) {return 1;}return (peach(day + 1) + 1) * 2;}
}

爬到第20阶

只有两种方法:1、19阶的爬法+爬一阶,2、18阶的爬法+爬两阶

同理

爬到第19阶

只有两种方法:1、18阶的爬法+爬一阶,2、17阶的爬法+爬两阶

。。。

爬到第3阶

1、2阶的爬法+爬一阶,2、1阶的爬法+爬两阶   (共2+1种,是爬到第1阶的方法
+爬到第2阶的方法)

爬到第2阶

1阶的爬法+爬一阶,0阶爬两阶  (共2种)

爬到第1阶

1阶爬一阶  (共1种)

package exercise;public class exercise11 {public static void main(String[] args) {System.out.println(stairs(20));}public static int stairs(int sum){if (sum == 1) {return 1;}if (sum == 2){return 2;}return stairs(sum - 1) +stairs(sum - 2);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/751453.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实战Python Socket编程:开发多用户聊天应用

实战Python Socket编程&#xff1a;开发多用户聊天应用 Python Socket 编程概述什么是Socket编程&#xff1f;Socket编程的应用场景Socket编程的重要性基本概念 环境准备Python版本必要的库开发环境配置调试工具 基本Socket编程创建Socket绑定Socket到端口监听连接接受连接发送…

24.第12届蓝桥杯省赛真题题解

A.空间&#xff08;100%&#xff09; 计算机存储单位计算 1TB2^10 GB 1GB2^10 MB 1MB2^10 KB 1KB2&10 B 1B8 bit(bit位二进制的最小的存储单位) #include <iostream> #include <cmath>using namespace std; //2^28B 2^2int main(){std::ios::sync_with_stdio…

【C语言入门】浮点型数据在内存中的存储

✨✨欢迎大家来到Celia的博客✨✨ &#x1f389;&#x1f389;创作不易&#xff0c;请点赞关注&#xff0c;多多支持哦&#x1f389;&#x1f389; 所属专栏&#xff1a;C语言 个人主页&#xff1a;Celias blog~ 目录 ​编辑 引言 引例 一、浮点型在内存中的存储方式 1.1 …

在idea中配置tomcat服务器,然后部署一个项日

1.下载tomcat Tomcat下载 点击右边的tomcat8 找到zip点击下载 下载完&#xff0c;解压到你想放置的路径下 2.配置环境变量 打开设置找到高级系统设置点击环境变量 点击新建&#xff0c;变量名输入&#xff1a;CATALINA_HOME&#xff0c;变量值就是Tomcat的安装路径&#x…

【QT+QGIS跨平台编译】之七十七:【QGIS_Gui跨平台编译】—【错误处理:字符串错误】

文章目录 一、字符串错误二、处理方法三、涉及到的文件一、字符串错误 常量中有换行符错误:(也有const char * 到 LPCWSTR 转换的错误) 二、处理方法 需要把对应的文档用记事本打开,另存为 “带有BOM的UTF-8” 三、涉及到的文件 src\gui\qgsadvanceddigitizingdockwidge…

智慧礼金:电子礼金薄,让礼薄更添智能,你确定不进来看看?

智慧礼金&#xff1a;电子礼金薄&#xff0c;让礼薄更添智能&#xff0c;你确定不进来看看&#xff1f; 一、重要声明二、相关介绍三、使用好处四、如何找到该小程序 随着科技的不断进步&#xff0c;传统的纸质礼金簿已经逐渐被电子化管理所取代。今天&#xff0c;我们要向大家…

Java解决完全二叉树的节点个数

Java解决完全二叉树的节点个数 01 题目 给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面一层的…

1990-2022年各省全要素生产率数据(仅结果)

1990-2022年各省全要素生产率数据&#xff08;仅结果&#xff09; 1、时间&#xff1a;1990-2022年 2、指标&#xff1a;地区、年份、OLS、FE、RE、DGMM、SGMM、SFA1、SFA2、SFA3、SFA3D、TFE、非参数法 3、范围&#xff1a;31省 4、计算说明&#xff1a; 产出指标&#x…

【自动化测试】如何在jenkins中搭建allure

相信大家在做自动化测试过程中&#xff0c;都会用到自动化测试环境&#xff0c;目前最常见的就是通过容器化方式部署自动化测试环境&#xff0c;但对于一些测试小白&#xff0c;不是很会搭建持续集成环境&#xff0c;特别是从0-1的过程&#xff0c;需要自行搭建很多依赖环境&am…

奇数乘积(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int i 1;int j 3;//循环运算&#xff1b;while (j < 12){//运算&#xff1b;i i * j;//改变数值&#xff1b;j 2…

rt-thread之通讯协议modbus软件包的使用记录(lwip+modbus组合)

前言 使用freemodbus软件包使用网口通讯(sallwip)ip地址使用dhcp动态获取 软件包 相关宏定义 /*-----------------------------------------NET 宏定义-------------------------------------------*/#define RT_USING_SAL #define SAL_INTERNET_CHECK /* Docking with prot…

前端框架vue的样式操作,以及vue提供的属性功能应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

【Linux】环境基础开发工具使用

目录 Linux软件管理器 yum 1.什么是软件包 2.查看软件包 3安装与卸载 vim-Linux编辑器 1.vim基础概念 2.vim的基础操作 命令模式基本操作 底层模式基本操作 3、其它模式 Linux编译器 gcc/g 1.如何进行编译 2.编译的四个过程 预处理(-E) 编译(-S) 汇编(-c) 链接…

python二级备考(2)-简单应用题

第1套 使用turtle库的turtle. right()函数和turtle.fd()函数绘制一个菱形&#xff0c;边长为200像素&#xff0c;4个内角度数为2个60度和2个120度 键盘输入一组人员的姓名、性别、年龄等信息&#xff0c;信息间采用空格分隔&#xff0c;每人一行&#xff0c;空行回车结束录入&a…

EMQX 实践

MQTT 核心概念 发布订阅 MQTT 基于发布订阅模式&#xff0c;它解耦了消息的发送方&#xff08;发布者&#xff09;和接收方&#xff08;订阅者&#xff09;&#xff0c;引入了一个中间代理的角色来完成消息的路由和分发。发布者和订阅者不需要知道彼此的存在&#xff0c;他们…

mybatis实践篇(一)

日志&#xff08;logImpl&#xff09; StdOutImpl <setting name"logImpl" value"org.apache.ibatis.logging.stdout.StdOutImpl"/>Slf4jImpl <setting name"logImpl" value"org.apache.ibatis.logging.slf4j.Slf4jImpl"/&…

cannot find -xml2: No such file or directory的解决方法

一&#xff0c;问题现象 在编译库的时候出现如下图所示的报错&#xff1a;C:/msys64/mingw32/bin/…/lib/gcc/i686-w64-mingw32/13.2.0/…/…/…/…/i686-w64-mingw32/bin/ld.exe: ca nnot find -lxml2: No such file or directory collect2.exe: error: ld returned 1 exit s…

146 Linux 网络编程2 ,Socket编程,如何创建Linux 服务器 和linux 客户端

IPport 就是一个程序在网络上的身份证号码。 这意味着我们需要如果写一个服务器&#xff0c;至少需要将这台服务器的ip 和 端口号写到程序里面。 实际上更细化的说&#xff1a;应该是将这三都写进程序里面 &#xff1a; IP类型&#xff08;IPV4或者IPV6&#xff09;&#xff…

linux——进程(1)

目录 一、概念 1.1、认识进程 1.2、进程描述符&#xff08;PCB&#xff09; 1.3、进程的结构体&#xff08;task_struct&#xff09; 二、查看进程 三、获取进程的Pid和PPid 3.1、通过系统调用获取进程的PID和PPID 四、创建进程 4.1、fork() 4.2、用if进行分流 五、…