写点什么

阿里 P8 大牛刷算法的正确姿态!女朋友再也不用担心我刷不动力扣了

  • 2022-11-27
    湖南
  • 本文字数:2186 字

    阅读完需:约 7 分钟

前言

学习是一种基础性的能力。然而,“吾生也有涯,而知也无涯。”,如果学习不注意方法,则会“以有涯随无涯,殆矣”。


学习就像吃饭睡觉一样,是人的一种本能,人人都有学习的能力。我们在刚出生的时候,什么也不知道,是一张真正的白纸,我们靠学习的本能,学会了走路、说话、穿衣服…后来,我们上学了,老师把书本上的知识一点一点灌输到我们的脑子里,我们掌握的知识越来越多,与此同时,我们学习能力却好像越来越差了,习惯了被别人喂饱,似乎忘记了怎么来喂自己了。


学习本来只是一种本能,算不上什么能力,然而,经过二十多年的不断学习,学习反而成为了一种真正的能力,因为我们慢慢失去了它,它就更显得珍贵。


作为一个程序员,不断的学习更是重要,不学新的知识就迟早会被淘汰掉


昨晚逛了逛 GitHub,无意中看到一位 P8 大佬的算法刷题笔记,感觉发现了宝藏!有些小伙伴可能已经发现了,但咱这里还是忍不住安利一波,怕有些小伙伴没有看到。



关于算法刷题的困惑和疑问也经常听朋友们提及,在面试和不少业务中经常问到,但算法就必须依靠牢固的基础和刷题量。算法根基不扎实,不仅难过面试,对于代码性能的提升、编程语言的驾驭也会比别人弱很多。


因此,现在算法基础不牢固的同学,都很难通过大厂的面试。但是只靠刷题去提升算法能力,进度太慢,而且还容易抓不住重点。有了这个笔记的总结,对校招和社招的算法刷题帮助之大不言而喻,果断收藏安利之。

Java 算法

1、二分查找

又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。


public static int biSearch(int []array,int a){ int lo=0; int hi=array.length-1; int mid; while(lo<=hi){ mid=(lo+hi)/2;//中间位置 if(array[mid]==a){ return mid+1; }else if(array[mid]<a){ //向右查找 lo=mid+1; }else{ //向左查找 hi=mid-1; } } return -1; }
复制代码

2、冒泡排序算法

(1)比较前后相邻的二个数据,如果前面数据大于后面的数据,就将这二个数据交换。


(2)这样对数组的第 0 个数据到 N-1 个数据进行一次遍历后,最大的一个数据就“沉”到数组第 N-1 个位置。


(3)N=N-1,如果 N 不为 0 就重复前面二步,否则排序完成。


 public static void bubbleSort1(int [] a, int n){ int i, j;for(i=0; i<n; i++){//表示 n 次排序过程。 for(j=1; j<n-i; j++){ if(a[j-1] > a[j]){//前面的数字大于后面的数字就交换 //交换 a[j-1]和 a[j] int temp; temp = a[j-1]; a[j-1] = a[j]; a[j]=temp; } } } }
复制代码

3、插入排序算法


public void sort(int arr[]){ for(int i =1; i<arr.length;i++) { //插入的数 int insertVal = arr[i]; //被插入的位置(准备和前一个数比较) int index = i-1; //如果插入的数比被插入的数小 while(index>=0&&insertVal<arr[index]) { //将把 arr[index] 向后移动 arr[index+1]=arr[index]; //让 index 向前移动 index--; } //把插入的数放入合适位置 arr[index+1]=insertVal; } }
复制代码

4、快速排序算法



5、希尔排序算法


6、归并排序算法


7、桶排序算法


8、基数排序算法


9、回溯算法


10、剪枝算法


11、最大子数组算法


12、最小生成树算法

加密算法

1、AES

高级加密标准为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下


2、RSA

RSA 加密算法是一种典型的非对称加密算法,它基于大数的因式分解数学难题,它也是应用最广泛的非对称加密算法....



3、CRC

循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误....

4、MD5

MD5 常常作为文件的签名出现,我们在下载文件的时候,常常会看到文件页面上附带一个扩展名为.MD5 的文本或者一行字符,这行字符就是就是把整个文件当作原数据通过 MD5 计算后的值,我们下载文件后,可以用检查文件 MD5 信息的软件对下载到的文件在进行一次计算。两次结果.....

力扣算法

1、反转链表=

2、统计 N 以内的素数

3、寻找数组的中心索引

数组中某一个下标,左右两边的元素之后相等,该下标即为中心索引


**思路:**先统计出整个数组的总和,然后从第一个元素开始叠加,总和递减当前元素,叠加递增当前元素,知道两个值相等


public static int pivotIndex(int[] nums) {  int sum1 = Arrays.stream(nums).sum();  int sum2 = 0;  for (int i = 0; i<nums.length; i++){    sum2 += nums[i];    if(sum1 == sum2){      return i;    }    sum1 = sum1 - nums[i];  }  return -1;}
复制代码


4、删除排序数组中的重复项


5、x 的平方根


6、三个数的最大乘积


7、两数之和


8、斐波那契数列


9、环形链表


10、排列硬币


11、省份数量


12、预测赢家


13、香槟塔


14、井字游戏


15、打家劫舍


16、优势洗牌


总结

很多算法题其实本身并不难,难的是细节逻辑方面,如果这些细节方面没有笔记或者有人讲解的话,自己可能要好几天都不一定想的明白,一但被别人点破,只要几分钟可能就能想明白,所以说收集学习笔记和结伴学习都是非常不错学习方式,可以很高的提升自己的学习效率。

需要文章中配套资料的朋友可以——点击传送门

发布于: 刚刚阅读数: 4
用户头像

还未添加个人签名 2022-09-20 加入

还未添加个人简介

评论

发布
暂无评论
阿里P8大牛刷算法的正确姿态!女朋友再也不用担心我刷不动力扣了_Java_小二,上酒上酒_InfoQ写作社区