算法
文章平均质量分 61
记阿楠同学黑历史的小册子
水之积也不厚,则其负大舟也无力
展开
-
(算法)形象例子带你了解桶排序
概念阐述一种不需要比较(比大小,比如1<3)的排序(它的本质就是利用数字的每一位上的数进行排序)有一个数组arr=[100,31,21,43],请将它排序顾名思义,我们要准备几个桶 ([0,1,2,3,4,5,6,7,8,9],这样十个就够用了),一个额外的列表(count,bucket),我们首先将整个数组遍历,找出最大的数字,并获取它的位数,此处最大数字为100,位数为3,它的位数就是我们要出入桶的次数。第一次入桶找个位数从右往左开始遍历数组arr,第一个43,个位数3,.原创 2022-04-08 16:10:15 · 525 阅读 · 0 评论 -
(算法)荷兰国旗问题,快排的基础
题目概述(例1)给定一个数组arr,和一个数num,要求把数组内的数按照左部分全部是小于num的数,右部分全部是大于等于num的数。要求时间复杂度O(N),额外空间复杂度O(1)。实现逻辑准备两个变量,一个作为小于 num 的部分的右边界,一个 i ,作为指针。(这里假设 num = 3)图 1从最左边开始, i 指向 1 ,与num进行比较,1 < 3,则边界向右移动一个位置,i++;i 指向 3 ,3 = 3 ,则边界不动,i++;i 指向...原创 2022-04-06 17:57:51 · 226 阅读 · 0 评论 -
(算法)归并排序的延申,求小和问题以及逆序对问题。(超详细保姆级讲解)
求小和问题简述有一个数组,我们从左往右遍历,每移动到一位就将它左边的所有比它小的数字全部相加,最后的总和记为小和。下面是一个常规做法过程例子:那么我们需要的是更快的做法。分析逻辑我们仍然可以使用之前的归并排序,将其中merge的部分进行修改。一下面为例,仍然是将该数组一分为二图 1图 2仍然是准备两个指标,和一个空列表help看左边的1,3左边p1指向1右边p2指向3,进行比较,1<3,小和加1,把1存入help列表,指标p1右移出界(左边没有数字了)...原创 2022-04-03 21:15:56 · 677 阅读 · 0 评论 -
(算法)一个例子详解递归行为,master公式的使用;递归拓展归并排序
递归概述相当于是一个多线程协同运算的过程,相比较之前的排序,具有更好的时间复杂度,同时也有更多的限制。实例1以求某一范围内的最大值为例;找到arr[L...R]内的最大值Public static int process(int[] arr,int L,int R){ if(L == R){ return = arr[L]; } int mid = L+((R-L)>>1) ; //求该范围内的中间位置 int Leftmax = process(arr,原创 2022-04-02 11:23:05 · 919 阅读 · 0 评论 -
(算法)当我们没有官方检测器时,对数器可以解决我们对自己代码的检测,下面接受对数器的意义及写法用法。
对数器的作用在我们练习算法题的时候,题被解了出来,通常要依赖网上的检测器进行检验,那么能不能不依赖于它呢?对数器由此而生,它是作为我们检验自己代码是否合格的工具。比如我们需要将一个数组进行排序,我的方法有很多,我可以递归,也可以冒泡,也可以直接暴力解法,我挨个比较遍历(这种是自己所能确定的最正确的方法,但是它的时间复杂度可能也是最大的)。当写了一个递归,不能确定它是不是完全的排序正确,可以做一个随机数组生成器,再在里面用我们的递归和我们的稳妥的暴力解法(或系统自带的排序sort之类)同时对数组进行排序原创 2022-03-25 08:37:38 · 89 阅读 · 0 评论 -
(算法)三道事例让你懂得二分法
简述二分法与常规找排序的不同以及优势通常我们在寻找一个有序数组中的最大值,或者是找某个数,最常规的做法是遍历,比如从左向右依次比较,时间复杂度为O(N),而使用二分法,则可以将时间复杂度控制到O(logN,log(2,N在这里通常简写为logN))。第一个简单事例来初步了解在一个有序数组中,寻找到一个指定的数。(1)常规做法,遍历一边O(N)(2)使用二分法:我们找到整个数组的中间位置,将它与需要寻找的指定数字进行比较,若中间数字比目标数字小,则我们可以确定该数字在整个数组的右边,再对右半原创 2022-03-24 20:46:08 · 1166 阅读 · 4 评论 -
(进一步了解异或)关于异或的例题两则(面试试题)
题目一个数组,(1)只有一个数值出现次数为奇,剩下所有数字出现次数都是偶,求这个数。(2)该数组中有两个数出现次数都为奇,剩余数字出现次数都为偶,求这两数。解题(1)分析根据异或的性质,相同数值异或...原创 2022-03-20 13:17:05 · 711 阅读 · 4 评论 -
(算法)时间复杂度及冒泡排序(附:异或^的用法讲解)
目录常数操作时间复杂度冒泡排序 常数操作 释义:操作如果和样本的数据量没有关系,每次都是一个固定时间完成的操作。比如:常见的算数运算(+-*/...)常见的位运算(>>,|,&,^...)赋值,比较,自加自减,数组中按地址偏移量直接命中等等。 时间复杂度 释义:作为算法流程中,常熟操作数量的一个指标,也就是评判一个算法好坏的标准。通常用(念作big O)O()表示。根据算法去总结它的常数操作数量的表达式,只保留其最高阶项;高阶项系数原创 2022-03-17 17:05:20 · 449 阅读 · 7 评论