Algorithm
文章平均质量分 75
XV_
喜欢读书,热衷于探究本质,热爱技术,终身学习,不断成长。
展开
-
leetcode面试题 10.01. 合并排序的数组
直接排序直接使用Java已有的方法进行排序,这一招…大意了!这题简单,就是个基本的排序,后面难题,可能这只是一小步,内个时候直接用排序算法比较合适,这个不合适。。class Solution { public void merge(int[] A, int m, int[] B, int n) { for(int i = 0; i < n; i++){ A[m+i] = B[i]; } Arrays.sort(A.原创 2021-03-28 15:48:11 · 127 阅读 · 0 评论 -
Leetcode1512. 好数对的数目 & 抽出本质原型 & 利用范围条件
解法1:暴力枚举class Solution { public int numIdenticalPairs(int[] nums) { int count = 0; for(int i = 0;i < nums.length; i++){ for(int j = i + 1; j < nums.length; j++){ if(nums[i] == nums[j]) .原创 2021-03-26 14:23:18 · 139 阅读 · 0 评论 -
【算法】学习笔记(5):快速排序
注意一个C++的坑sizeof()这个函数静态数组可以求长度,动态new出来的数组不行,因为针对的是指针……,不过既然的动态数组了,其长度本身必然是一个变量了,你没有必要这么求长度。下面看快速排序的代码。#include <iostream>#include <algorithm>using namespace std;// divide 比基准点小的放左边,大的放右边,返回基准点Index// 对于快速排序,重点是【划分策略】// “=”的有无,取决于极端情况原创 2020-12-08 20:48:55 · 89 阅读 · 0 评论 -
【算法】学习笔记(4):分治思想 & 归并排序
分治思想,分治策略,自古有之,与人类生活息息相关,其本质是将大问题拆解为小问题,小问题转换为已知解的问题,进而求解。军队管理,国家分级治理……大规模数据排序,例如10000000000万个数,规模大的时候,分治思想就很重要了。基本思想分!如果问题还大,就再分!直到其变成容易求解的基本问题,这个过程其实与递归的类似的。总而言之,递归思想与分治策略,有着密不可分的联系。对于分解之后的基本问题,我们就可以使用一些基本的策略求解,因为容易,比如枚举。核心策略分:大问题–> 小问题 --原创 2020-12-07 16:12:59 · 236 阅读 · 0 评论 -
【算法】学习笔记(2):递归思想
0 回顾之前的笔记(0)和笔记(1),我们介绍了算法的基本含义,并且举了一些实例,同时理解了,算法就是人类在教计算机做事情!我们知道,算法就是解决问题的方案,我们将自然语言描述的问题,转换为符号语言,再解决问题,使用计算机思维,构建解决问题的算法,最后转换为计算机可以识别的语言,教会计算机,让它帮助我们解决问题。在算法设计的时候,我们需要关注其时间和空间的复杂度,这与实际问题有关,可能关注事件,也可能关注空间,也可能二者兼有。下面,我们来看看递归思想,并且使用实例来理解抽象的思想。1 递归思想递原创 2020-12-02 12:13:13 · 403 阅读 · 0 评论 -
【算法】学习笔记(1):算法就是人类去教会计算机的方法
人生处处皆算法,算法是解决问题之道。对于计算机科学中的算法,我更喜欢将其理解为利用人类思维之一:计算机思维,去解决一些人类不擅长的问题,比如大量重复运算,然后,人类使用计算机编程语言去 教计算机解决问题,我们的最终目的是教会计算机做事,它是非常听话的,我们应该充分利用它!这就像是,你教别人知识,你自己对于知识的理解一定会更深刻,同理,教会计算机做事,对于问题的理解,也会更深刻,教会它更快速的做事,对问题的理解会进一步深刻。我很喜欢教别人,因此我更加喜欢这样去理解算法!我在教会计算机做事情!...原创 2020-11-30 15:14:13 · 142 阅读 · 0 评论 -
【算法】学习笔记(0):算法初探(逻辑抽象 + 示例 + 代码实现)
什么是算法?人生皆算法,算法的本质,是解决问题的方法,遇到问题,寻找答案,解决问题,是作为一个人,一生都在做的事情。算法是人类思维的产物,是解决问题的方案,并且,它能够映射到计算机世界去实现,完成一些人类不擅长的事情,比如大量重复的计算。算法很有魅力,它很特别,但是并不神秘,我们时时刻刻都在运用着算法背后的“解决问题”的思想去生活,去过着每一天。用计算机思维去思考问题算法是普通的,也是特别的,它是人类使用计算机思维思考的产物,能够让人类更加充分地利用计算机这个人类发明的工具,这也是信息时代特有的产原创 2020-11-26 22:08:49 · 277 阅读 · 0 评论 -
【算法】学习方法
看理论学示例做图示最重要的是最开始直接抄别人的优秀的代码,就是如此简单,摆正心态,最开始不要非得自己想怎么做。原创 2020-11-19 10:28:26 · 209 阅读 · 0 评论 -
【算法】【殊途同归】搜索算法之(深度优先 || 广度优先)& (约束条件 || 限界函数)
对于所谓的分支限界法和回溯法,我们完全可以更加灵活,请看表格。深度优先广度优先约束条件限界函数算法策略√√回溯法局部判定√√√分支限界法局部判定√√√加限界的回溯法局部判定√枚举法全局判定√枚举法全局判定前两种是我们常见的,但是,事实上,这几种方式, 怎么玩都行,看实际需求了。一般来说,剪枝策略使用 约束条件 + 限界函数,然后再配合深度优先或者广度优先,是最好不过的了,也就是后两种。这样一来,原创 2020-11-17 22:09:43 · 1904 阅读 · 0 评论 -
如何高效学习算法【实例 + 可视化】
对于初学者来说,学习算法,不应该先学习抽象的理论,那样没有感觉,越学越晕,应该:有具体的例子有可视化过程同时需要结合理论知识对照学习,理论扎实、实践有效,同时要有结果反馈。推荐:算法可视化网站至于算法实例,相关书籍很多,《算法》《算法导论》等...原创 2020-10-02 08:26:38 · 333 阅读 · 0 评论 -
【算法】蛮力法/穷举法/枚举法 的基本问题分析
所有解空间:例如a,b,c取值范围都是 0~9,问abc组成的三位数的所有情况所有路径:遍历图、遍历树蛮力法的格式蛮力法由循环和选择语句构成使用循环,穷举所有情况使用选择,判断当前情况是否成立若成立,则得到问题的解若不成立,则继续循环循环 + 分支for(){ for(){ // 获取X所有可能的情况 if(X满足条件){ printf("X"); } }}蛮力法思想:穷举所有情况,找到符合条件的。这也意味着,得能够穷举,因此问题规模不能太大。..原创 2020-10-01 21:05:04 · 4351 阅读 · 0 评论