![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
记录算法的学习
777_yL
在路上
展开
-
冒泡排序(BubbleSort)
何为排序? 排序是一个非常经典的问题,它以一定的顺序对一个数组(或一个列表)中的项进行重新排序(可以进行比较,例如整数,浮点数,字符串等)(增加,非递减,递减, 增加,词典等)。 有许多不同的排序算法,每个都有其自身的优点和局限性。 排序通常被用作各种计算机科学课程中的介绍性问题,以展示一系列算法思想。 冒泡排序 基本思想 两个数比较大小,较大的数下沉,较小的数冒起来。 平均时间复杂度:O(n2)...原创 2020-02-17 16:22:29 · 174 阅读 · 0 评论 -
数据结构之稀疏数组sparsearray
基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。 处理方法 记录数组一共有几行几列,有多少个不同的值。 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模。 举例说明 应用案例 使用稀疏数组,来保留类似前面的二维数组(棋盘、地图等等) 把稀疏数组存盘,并且可以从恢复到原来的二维数组 整体思路分析 二维数组转稀疏数组 思路 1.遍历原始的二维数组,得到有效数值的个数sum 2.创建稀疏数组 sparseArray(int[sum原创 2020-05-11 15:15:36 · 156 阅读 · 0 评论 -
排序【一】如何分析一个排序算法
分类 冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序 如何分析一个“排序算法”? 排序算法的效率 最好情况、最坏情况、平均情况时间复杂度 之所以要区分这三种时间复杂度。第一是因为有些排序算法会区分,为了好对比,我们最好都做一下区分。第二,对于要排序的数据,有的接近有序,有的完全无序。有序不同的数据,对于排序的执行时间肯定是有影响的,我们要知道排序算法在不同数据下的性能表现。 考虑时间复杂度的系数、常数 、低阶 时间复杂度是在数据规模n很大的时候,忽略了系数、常数、低阶。但是实原创 2021-03-21 14:49:00 · 162 阅读 · 0 评论 -
【Leetcode】剑指 Offer 24. 反转链表
题目描述 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 思想 迭代法 定义两个指针prev、curr,prev指向前一个节点,curr指向当前节点。遍历当前链表,首先在指向反转时取出下一个节点并保留到next,防止链表丢失。然后将当前节点指向上一个节点(curr.next=prev)。反转完成后将prev、curr后移。 递归 使用递归函数,一直递归到链表的最后一个结点,该结点就是反转后的头结点,记作 retret . 此后,每次函数在返回的过程中,让当前结点的下一个结点的原创 2021-03-15 15:28:19 · 63 阅读 · 0 评论 -
【Leetcode】剑指 Offer 25. 合并两个排序的链表
题目描述 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 解题思路 两个递增排序的链表,我们可以从两个头节点中选取一个最小的当成头节点,然后依次遍历两个链表,通过比较大小,依次拼接到该链表后。 引入哨兵节点,方便后续取到排好序的链表 class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { //引入哨兵节点 ListNode preHead = ne原创 2021-03-15 14:46:05 · 58 阅读 · 0 评论 -
【Leetcode】剑指 Offer 53 - I. 在排序数组中查找数字 I
题目描述 统计一个数字在排序数组中出现的次数。 思路 排序数组查找目标数字出现的次数: 可以用寻找左侧边界的二分查找,定位到左侧边界的索引,然后再往下遍历,得到出现的次数。 寻找最左侧边界的二分搜索 int left_bound(int[] nums, int target) { if (nums.length == 0) return -1; int left = 0; int right = nums.length; // 注意 while (left < ri原创 2021-03-12 16:07:18 · 72 阅读 · 0 评论 -
【Leetcode】剑指 Offer 53 - II. 0~n-1中缺失的数字
题目描述 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。 思路 1.看到排好序的数组的搜索问题,就要想到二分查找。 2. 代码实现 class Solution { public int missingNumber(int[] nums) { int left=0; int right=nums.length-1; while(left原创 2021-03-12 15:00:24 · 65 阅读 · 0 评论