![](https://img-blog.csdnimg.cn/1ead87cf3cf9472abaf2581f468d3fae.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法与数据结构复习
复习算法~~~加油
小智RE0
慎独
展开
-
堆排序复习
之前有学习过堆的知识;数据结构(六) —[实现 堆(heap)(包含方法图解过程) 优先队列(Priority Queue)]堆排序:(1)先将数组前半部分构建一个半堆;(2)将第一个元素与最后一个元素交换位置;(3)此时前半部分不是最大堆了,那么进行维护;(4)使得数组部分不断地形成最大堆;重复(2)(3)(4)的操作,直到完成升序排序import java.util.Arrays;/** * @BelongsProject: 算法刷题文件夹 * @BelongsPackage原创 2022-03-23 23:04:59 · 463 阅读 · 1 评论 -
双指针问题复习
文章目录1.力扣[344]反转字符串2.力扣345:反转字符串中的元音字母3.力扣125:验证回文串4.力扣: 两数之和 II - 输入有序数组5.力扣[11] 盛水最多的容器问题6.力扣[15] : 三数之和7.力扣[16] : 接近的三数之和8.力扣[18] 四数之和9.力扣[881] 救生艇10.力扣[633] 平方数之和一般使用的双指针;对撞指针:在一段数据中的开头和结尾,两个指针分别出发;快慢指针:两个指针从左端同时出发; 一个指针移动快,一个指针移动慢;练习使用1.力扣[原创 2022-02-13 00:56:20 · 185 阅读 · 0 评论 -
滑动窗口问题复习
文章目录1.基础题入手1.1 力扣[3]: 无重复字符的最长子串1.2 力扣[209]: 长度最小的子数组2.其他题2.1 力扣[424] :替换后的最长重复字符2.2 力扣[76] : 最小覆盖子串2.3 力扣[438] :找到字符串中所有字母异位词2.4力扣[ 567]字符串的排列当然可以在B站找一些教学视频学习红桃A士算法古城算法教学简单来说;滑动窗口的思想就是(1)当不满足当前的条件时,向右扩充,当满足条件时,向右收缩左边界,得到一个解后暂时保存,(2)循环第一步,又得到一原创 2022-02-12 17:02:44 · 546 阅读 · 0 评论 -
二分查找算法复习
首先二分查找算法是要基于当前数组为有序数组;实际就是每次找中心点的值; 若目标数等于中心点了,直接返回即可,若目标数小于中间数,则在中心点的左侧查找,反之则在中心点的右边查找.在实际的使用中,二分查找可以用不同模板的方式实现,那么具体在判断中心点时的规则就不一样.从经典的基本问题入手;力扣原题704. 二分查找;class Solution { public int search原创 2022-02-11 14:09:44 · 812 阅读 · 0 评论 -
快速排序复习
基本思想;类似于归并排序的分治思想,但是 在快速排序中会将数组中的元素 小的放一边,大的放一边;排序即完成;找切分点,假设数组的第一个元素作为切分点,然后和后面的元素进行比较,只要比当前这个切分点元素小的,就向前交换, 直到数组末尾;再将切分点放到它的指针指向的合适位置;此时得到一个基于切分点分开的两块区域, 左侧元素普遍小于切分点元素值;右侧元素普遍大于切分点元素值;此时按照第一个切分,逐次向左向右进行递归;最终在一个一个切分点的作用下,其实就完成了排序;在912. 排序数组题目中.原创 2022-02-10 15:19:22 · 423 阅读 · 0 评论 -
归并排序练习
力扣88. 合并两个有序数组链接:https://leetcode-cn.com/problems/merge-sorted-array/class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { //使用临时数组,先将数组排序到其中; int[] temp = new int[m+n]; //临时数组的指针index; int ind.原创 2022-02-10 13:47:16 · 644 阅读 · 0 评论 -
选择排序复习
基本思想,先找到当前元素之后的数组中最小的元素,和当前元素交换位置即可.练习:912. 排序数组直接思想暴力法;class Solution { public int[] sortArray(int[] nums) { //基本选择排序做法; //数组的长度; int n = nums.length; for(int i =0;i<n-1;i++){ //初始定义当前的最小数位置; .原创 2022-02-09 14:56:23 · 122 阅读 · 0 评论 -
冒泡排序复习
基本思想,依次比较相邻的元素大小,将大的元素交换到后面,每次都是从当前元素位置出发,直到未完成排序的末尾;依次冒泡,直到完成由小到大的排序;class Solution { public int[] sortArray(int[] nums) { int n = nums.length; //基本冒泡排序; for(int i =0;i<n-1;i++){ for(int j=1;j<n-i;j++){ .原创 2022-02-09 15:29:14 · 242 阅读 · 0 评论 -
插入排序复习
基本思想将一个元素插入到有序的数组中先假设前面的第一个元素是已经排好序的数组;不断从后面依次访问元素,放入到前面的有序数组中,根据由小到大的规则调整这个元素在有序数组中的位置(逐个比较交换),…直到当前数组结束;还是在912. 排序数组题进行测试基本思想步骤class Solution { public int[] sortArray(int[] nums) { int n = nums.length; //插入排序; //假定前面的是.原创 2022-02-09 16:41:44 · 214 阅读 · 0 评论 -
希尔排序复习
希尔排序基本是将数组进行分组,在小分组内进行插入排序,争取将小的元素放到前面,大元素排到后面;但是根据分组区间的规则不同时,会达到不同的效果.class Solution { public int[] sortArray(int[] nums) { int n = nums.length; //希尔排序分组思想; //这里分组大小每次取一半;直到1; for(int group = n/2;group>0;group/=.原创 2022-02-09 17:44:30 · 339 阅读 · 0 评论 -
归并排序复习
基本思想:先将一个整体的数组拆分为小数组,进行排序,然后再归并为整体的数组,合并两个有序数组;基于深度优先遍历的排序,数组先分治出小数组,将小分组的元素进行比较,变为有序数组后,向上合并,最终排序为整体的有序数组.class Solution { public int[] sortArray(int[] nums) { int n = nums.length; //归并排序完成; if(n < 2) return nums; .原创 2022-02-09 22:06:33 · 204 阅读 · 0 评论