2022年度GitHub最火的力扣算法刷题宝典,手把手教你如何刷力扣~

前言

昨晚逛了逛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、插入排序算法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XsEBOvkk-1651310316847)(https://ask.qcloudimg.com/http-save/7948575/2d5ccdebc27c24c8dc8e63c41366b351.jpeg)]

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、希尔排序算法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x43Idp27-1651310316848)(https://ask.qcloudimg.com/http-save/yehe-7948575/dd231ef3b8806609455e9605fbc1c3e8.png)]

6、归并排序算法

7、桶排序算法

8、基数排序算法

9、回溯算法

回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。

10、剪枝算法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KtRwWX5M-1651310316850)(https://ask.qcloudimg.com/http-save/yehe-7948575/bc212c3a0b8c85cff885348430592de8.png)]

11、最小生成树算法

加密算法

1、AES

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QhJH27jY-1651310316850)(https://ask.qcloudimg.com/http-save/7948575/4ef7bde891545b29ea5cb1846733e6ca.jpe
在这里插入图片描述
g)]

2、RSA

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dy2JkRoV-1651310316851)(https://ask.qcloudimg.com/http-save/7948575/bb6d81a30dd39247c59f86e592286dc3.jpeg)]

3、CRC

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

4、MD5

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

力扣算法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pqGaNvG6-1651310316852)(https://ask.qcloudimg.com/http-save/7948575/522209af72c40ed4e2da1f7bb8d969a4.jpeg)]

1、反转链表=

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1dsJileU-1651310316852)(https://ask.qcloudimg.com/http-save/7948575/6c1b3c9e19db7e5be892a79fd9e04b15.jpeg)]

2、统计N以内的素数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j0Qhc4yZ-1651310316853)(https://ask.qcloudimg.com/http-save/7948575/0f7e7a4c2d4a8191fb8a8edb3843aba4.jpeg)]

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、删除排序数组中的重复项

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6y2AJRTo-1651310316853)(https://ask.qcloudimg.com/http-save/yehe-7948575/93351415efb5adf5ddbe4654369fc681.png)]

public int removeDuplicates(int[] nums) {
	if (nums.length == 0) return 0;
	int i = 0;
	for (int j = 1; j < nums.length; j++) {
		if (nums[j] != nums[i]) {
			i++;
			nums[i] = nums[j];
		}
	}
	return i + 1;
}

5、x的平方根

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-71fjGTUy-1651310316854)(https://ask.qcloudimg.com/http-save/yehe-7948575/a8d679cd4375ebb42bb7a4e28cff9e48.png)]

6、三个数的最大乘积

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2yqtza56-1651310316855)(https://ask.qcloudimg.com/http-save/yehe-7948575/b4d897d03dff04f5d30d8f3dea022132.png)]

7、两数之和

8、斐波那契数列

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XpTSnx6a-1651310316858)(https://ask.qcloudimg.com/http-save/yehe-7948575/9ce081c6298c49d60740df4c3546486b.png)]

9、环形链表

10、排列硬币

11、省份数量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AXhE6dkS-1651310316860)(https://ask.qcloudimg.com/http-save/yehe-7948575/939ec5b9af7e08dfb4c59404777f40d2.png)]

12、预测赢家

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ky4CWTMc-1651310316860)(https://ask.qcloudimg.com/http-save/yehe-7948575/95a2d17b82694be9a02ef7dacf20d980.png)]

13、香槟塔

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EwJVcyiG-1651310316861)(https://ask.qcloudimg.com/http-save/yehe-7948575/f0ae4d14396ec7222c67ae463707fc68.png)]

14、井字游戏

15、打家劫舍

16、优势洗牌

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cpy2ABdj-1651310316862)(https://ask.qcloudimg.com/http-save/yehe-7948575/08764373e0d117caf0b1d241882a0b21.png)]

总结

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


👇🏻 添加 博主 获取更多资料👇🏻

  • 5
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于力扣刷题C++常用操作,我可以给你一些常见的操作和技巧: 1. 使用 STL 容器和算法库:STL(Standard Template Library)是 C++ 标准库中的一个重要组成部分,包含了许多常用的容器和算法。在力扣刷题中,使用 STL 可以大大提高代码的效率和可读性。例如,vector 可以用来存储动态数组,sort 可以用来排序等等。 2. 使用 auto 关键字:auto 关键字可以自动推导变量类型,可以减少代码量和提高可读性。例如,auto x = 1; 可以自动推导出 x 的类型为 int。 3. 使用 lambda 表达式:lambda 表达式是 C++11 中引入的一种匿名函数,可以方便地定义一些简单的函数对象。在力扣刷题中,使用 lambda 表达式可以简化代码,例如在 sort 函数中自定义比较函数。 4. 使用位运算:位运算是一种高效的运算方式,在力扣刷题中经常会用到。例如,左移运算符 << 可以用来计算 2 的幂次方,右移运算符 >> 可以用来除以 2 等等。 5. 使用递归:递归是一种常见的算法思想,在力扣刷题中也经常会用到。例如,二叉树的遍历、链表的反转等等。 6. 使用 STL 中的 priority_queue:priority_queue 是 STL 中的一个容器,可以用来实现堆。在力扣刷题中,使用 priority_queue 可以方便地实现一些需要维护最大值或最小值的算法。 7. 使用 STL 中的 unordered_map:unordered_map 是 STL 中的一个容器,可以用来实现哈希表。在力扣刷题中,使用 unordered_map 可以方便地实现一些需要快速查找和插入的算法。 8. 使用 STL 中的 string:string 是 STL 中的一个容器,可以用来存储字符串。在力扣刷题中,使用 string 可以方便地处理字符串相关的问题。 9. 注意边界条件:在力扣刷题中,边界条件往往是解决问题的关键。需要仔细分析题目,考虑各种边界情况,避免出现错误。 10. 注意时间复杂度:在力扣刷题中,时间复杂度往往是评判代码优劣的重要指标。需要仔细分析算法的时间复杂度,并尽可能优化代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值