算法
memory_cood
最穷不过讨饭不死终将出头
展开
-
最优冒泡法排序(C语言)
对于大多数学程序的人来说。冒泡法排序肯定不陌生,但如何使算法变得更加完美,这就看个人修为了。接下来用C语言给大家一种改进的冒泡法排序。先看代码在这里同样可以看到时间复杂度依然是O(n^2),但在实际运用中,上面的排序要比原始版的节省许多的时间。为什么会节省时间呢?优势:原始版的算法,经过每一次的循环只能排一个数,也就是必须要经过n(n-1)/2次比较才能排好序,上面实现的算法就不用原创 2017-03-05 10:20:30 · 673 阅读 · 0 评论 -
java 大数相乘(数组方法实现)
栗子:987654321 乘以 11public class Main{ public static void main(String[] args) { int[] sum = new int[50]; sum[sum.length-1] = 1; // 默认最后一个为 1 int n = 100; // 100...原创 2019-05-02 10:44:25 · 970 阅读 · 0 评论 -
Java 删除链表的倒数第N个节点
1. 删除链表的倒数第N个节点给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n保证是有效的。进阶:你能尝试使用一趟扫描实现吗?/** * Defini...原创 2019-04-27 20:47:38 · 348 阅读 · 0 评论 -
Java 反转链表
反转链表反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?迭代法:/** * Definition for singly-linked list. * public class...原创 2019-04-27 21:19:40 · 293 阅读 · 0 评论 -
java 重建二叉树(前序和中序)
案例:给定两个数组,一个为二叉树的前序遍历,另一个为二叉树的中序遍历,还原二叉树前序的作用就是确定根节点,中序可以根据前序的根节点确定该根节点的左右节点;使用递归的方法实现public class RebuildBinaryTree{ // 二叉树数据结构 public static class Tree{ int val; Tree left; ...原创 2019-05-03 10:42:59 · 285 阅读 · 0 评论 -
Java 合并两个有序链表
合并两个有序链表Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.Example:Input: 1->2->4, 1->3->4...原创 2019-04-28 19:30:55 · 1342 阅读 · 2 评论 -
java 回文链表四
回文链表Given a singly linked list, determine if it is a palindrome.Example 1:Input: 1->2Output: falseExample 2:Input: 1->2->2->1Output: trueFollow up:Could you do it in O(n)...原创 2019-04-28 21:04:25 · 245 阅读 · 0 评论 -
java 判断环形链表
环形链表Given a linked list, determine if it has a cycle in it.To represent a cycle in the given linked list, we use an integer pos which represents the position (0-indexed)in the linked list where ...原创 2019-04-28 21:09:44 · 779 阅读 · 0 评论 -
java 二叉树的最大深度
二叉树的最大深度Given a binary tree, find its maximum depth.The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.Note:A leaf is a node with...原创 2019-05-01 09:39:58 · 535 阅读 · 0 评论 -
最大子序列和(动态规划)
给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。根据题意,我们必须明确,答案是一个 连续的最大和子数组,它和最大上升子序列是不同的。一般来说过,只要一旦判断题目是有关动态规划的题,第一步就是...原创 2019-03-12 12:59:55 · 27593 阅读 · 12 评论 -
只出现一次的数字(异或运算符)
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。在这里必须先明白 异或运算符(^)的使用方法:1^1=0 0^0=0 只有 1^0=1 这个最基本的原理 现在来解释一下这个算法运用的原理:0 ^ 任何数 = 任何数 ,对同一个数异或两次 结果不变 题干中明确说明了,只有有一个数只出...原创 2019-03-04 09:36:14 · 434 阅读 · 0 评论 -
归并算法(Java版)
归并算法,正如他的名字一样,递归算法+合并算法,所以想要学习这个算法,可以从两方面先入手,一就是先学习递归算法,了解递归思想。二肯定就是合并算法;这两个算法并不难学,不知道的可以先查一下资料。还是先看递归算法把,代码很简单,没什么技术含量,重点是他的结束条件,也就是递归基该怎么取得问题合并算法看下面两张图片,行数太多没法截在一起,请见谅:好了。主要的代码就在上面了,下面给个原创 2017-03-05 19:52:58 · 982 阅读 · 0 评论 -
去掉重复字符(C语言)
利用c语言实现消除数组中重复的字符,很多人都能实现,但复杂度太大O(n^2),也有利用空间换时间的,但都不太理想。现在我来介绍一种可行的方法。什么都不说先上代码。运行程序为这个思想其实很简单,但前提是先排好序。时间复杂度为O(n)。如果你还看不懂,那就拿起笔照着程序走一遍你就明白了。我也是这样懂的原创 2017-03-03 21:41:35 · 7848 阅读 · 2 评论 -
java快速排序
快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。- 高快省的排序算法有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很原创 2017-03-28 19:49:40 · 212 阅读 · 0 评论 -
java KMP算法和next[]改进算法
KMP算法最大的优点之处:在匹配失败时,主串中的指针i不需要回溯,而是在模式中找出适当的字符继续比较。下面是模式串中的失败函数 i= 0 1 2 3 4 模式 a a a a b Next[i]= -1 0 1 2 3...原创 2017-04-11 20:21:32 · 521 阅读 · 0 评论 -
动态规划之背包问题(入门版)
题目描述辰辰是个很有潜能、天资聪颖的孩子,他的梦想是称为世界上最伟大的医师。 为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。 医师把他带到个到处都是草药的山洞里对他说: “孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。 我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大...原创 2019-02-23 17:23:28 · 173 阅读 · 0 评论 -
动态规划之背包问题(优化版)
这篇是接上一篇博客的优化版,如果不清楚题干请阅读上一篇动态规划之背包问题(入门版)(如果刚入门,建议先阅读入门版,有助于理解思想),主要在这里优化的是在空间上,废话不说太多,直接上代码,#include<iostream>#include<algorithm>using namespace std;int main(){ //T 总的背包容量 ...原创 2019-02-25 11:01:04 · 434 阅读 · 0 评论 -
动态规划之最长上升子序列(贪心+二分法)
动态规划算法和动态规划算法的区别:当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。运用贪心策略在每一次转化时都取得了最优解。问题的最优子结构性质是该问题可用贪心算法或动态规划算法求解的关键特征。贪心算法的每一次操作都对结果产生直接影响,而动态规划则不是。贪心算法对每个子问题的解决方案都做出选择,不能回退;动态规划则会根据以前的选择结果对当前进行选择,有回退功能。动...原创 2019-03-01 16:12:32 · 2094 阅读 · 0 评论 -
动态规划之最长上升子序列(入门版)
最长上升子序列不是最大上升子序列,思想一样但结果可能不一样 比如:序列(100, 1, 2, 3)的最大上升子序列和为100,而最长上升子序列为(1, 2, 3)。现在我们要解决的问题就是在给定的数组中找出最长上升子序列:先给一个栗子给定的数组 a[7] = {1,6,4,2,3,9,8}思想:这里用到的是一个自底向上的寻找最优子结构的的思想。粗俗来说:如果你想要得到...原创 2019-02-26 16:56:23 · 10668 阅读 · 2 评论 -
java 验证二叉搜索树
Given a binary tree, determine if it is a valid binary search tree (BST).Assume a BST is defined as follows:The left subtree of a node contains only nodes with keys less than the node's key. The ...原创 2019-05-01 10:04:25 · 349 阅读 · 0 评论