算法
A小丑先生A
这个作者很懒,什么都没留下…
展开
-
算法学习 —— 链表反转
链表反转链表反转的步骤:定义一个新的节点 newNode遍历需要反转的链表 node,遍历的同时进行反转,首先获得节点 newNode的下一个节点(保存于 newNodeNext),接着获得需要反转的节点的当前节点(nowNode),将需要遍历的节点的当前节点指向下一个节点(node = node.next),将前期复制的当前节点(nowNode)的下一节点指向新节点的下一节点(newNodeNext),将新节点的下一节点指向前期复制的当前节点(nowNode)。代码实现:/** * 反转原创 2020-08-22 15:30:44 · 179 阅读 · 0 评论 -
算法学习 -- 稀疏数组与普通数组之间的转换
普通数组转换为稀疏数组普通数组 array[] 转化为稀疏数组 arr2[][] 的步骤(大部分元素为0的情况):统计不为 0 的数组的个数 num创建一个二维数组 arr2[num][3] 用于存放稀疏数组的值设置 arr2[0][0] 的值设置为 数组 array 的行数设置 arr2[0][1] 的值设置为数组 array 的列数设置 arr2[0][2] 的值设置为数组 array 中的非 0 的元素的个数逐一遍历 数组 array ,将非 0 的值的 x 值写入 arr2[i][原创 2020-08-22 01:11:11 · 179 阅读 · 0 评论 -
八皇后问题——递归解法
八皇后问题解决思路:定义一个一维数组 queue[] 用于存放各个皇后的位置(由于每一行只能放一个皇后,因此第 n 个皇后存放于第 n-1行)依次将 8 个皇后放入棋盘,首先将第 1 个皇后放到第一行第一列,判断是否有冲突,若有冲突,则将第一个皇后向右边移动一列,若没冲突,则使用递归放入第 2 个皇后,接着判断前面的皇后是否有冲突,有冲突则向右移动一列,没冲突则依照放入第1、2个皇后的步骤继续放入剩下的皇后,当即将要放入的皇后的个数大于需要放入的皇后的个数时,输出queue数组中存放的值(即满原创 2020-08-09 03:39:57 · 355 阅读 · 0 评论 -
算法(一) 动态规划法
动态规划法之 0-1 背包问题使用一个二维数组 val[i][j] 存放当前容量下的最大价值,其中第 i 行表示可选物品中加入 第 i 个物品, j 为当前背包的假设容量,val[i][j] 表示假设当前的背包的最大容量为 j ,在可选的物品中加入第 i 个物品后,背包能装入的物品的最大价值,val[i][j] 值的选取方法如下:初始化第 0 行和第 0 列为0 ,表示当没有可选物品或者当前...原创 2020-04-03 02:49:54 · 98 阅读 · 0 评论 -
算法(三) 求链表的中间节点技巧
快慢指针法使用两个指针同时遍历链表,一个遍历的步长为1(慢指针,即 node= node.next),另一个遍历的步长为2(快指针,即 node = node.next.next),当快指针到达链表尾部时,根据他们的步长的差值,则此时慢指针走过的长度为快指针的一半,即慢指针刚好到达链表的中间节点。...原创 2020-03-23 12:32:40 · 225 阅读 · 0 评论 -
算法(一) 求集合中重复出现或者不重复出现的数值
1. 求集合中唯一重复的数或者唯一不重复的数求法一:利用异或两个相同的数进行异或,结果为0将集合中所有的元素进行异或运算,得到的结果为最终的唯一重复的数或者唯一不重复的数,原因:A ^ B ^ C ^ D ^ A ^ C ^ B=(A ^ A) ^( B ^ B) ^ (C ^ C) ^D=D,例子:一个集合中只有一个数是只出现一次,其他数出现两次 public int s...原创 2020-02-14 01:58:00 · 554 阅读 · 0 评论 -
算法(二) 字符串中的第一个唯一字符
求字符串中第一个只出现一次的字符思路:将字符串转化为字符数组新建一个长度为128的 int 数组(标准ASCII码字符集总共的编码有128个,包括32个通用控制符,10个十进制数码,52个英文大小写字母和34个专用符号 )将当前字符的 ASCII 值作为数组的下标,该下标对应的数组的值为该字符串出现的次数(未出现为0默认值,出现一次为1,出现多次为-1)根据字符串数组的所有 ASCII...原创 2020-02-17 04:28:54 · 117 阅读 · 0 评论