堆排序——C语言实现

如何构建堆请参照:堆——C语言实现 堆排序: //堆排序 void sortHeap(int arr[], int n){ MH mh;//堆 initMaxHeap(&mh, n); for (int i = 0; i < n; i++)...

2018-08-25 17:30:14

阅读数:29

评论数:0

C语言实现heapify算法堆转换

 heapify算法主要是把一个数组按堆的顺序排好,可以实现一定的优先级,下面是对数组堆化参考: //下移操作: void AdjustDown(MH* mh, int k){ while (k * 2 <= mh->count) { int...

2018-08-25 17:26:57

阅读数:52

评论数:0

判断元素出栈入栈的合法性

一个例题:  栈的存储是先入后出,所以比如是12345入栈,那么出来就是54321. 但也可以先1234然后4出来,5入栈,再全出,就是45321的顺序。 如何判断这个顺序:每次入栈的时候,都试探一下现在出栈是否符合对应的出去的顺序。就可以了。c++代码如下   #include &a...

2018-08-18 17:28:29

阅读数:71

评论数:0

把字符串颠倒,并把字符串里的每个单词再颠倒(c语言实现)

题目:有一个字符串:"student a am i",要把它变成:“i am a student” c语言实现 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h&g...

2018-08-18 14:30:04

阅读数:437

评论数:0

把一个用数组表示的整数加一(十进制进位模拟)

题目: 给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 示例 1: 输入: [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 12...

2018-08-15 11:37:33

阅读数:105

评论数:0

初级算法学习步骤总结

                                                      前言 零散整理一个多月终于整理完了。。。。 这是一篇初级算法学习的步骤总结,或许可以帮助你怎么去接触算法 阅读本文需要一定java语法基础和api文档查看基础,但算法其实看重的是思想而...

2018-07-29 18:51:51

阅读数:231

评论数:0

4个基本算法思想:穷举、递推、递归、概率

4个基本算法思想:穷举、递推、递归、概率 内容:这4个基本算法思想是解决基础问题的很实用的方法。这里开始其实就已经是把所有需要的知识准备好了,之后就要开始解题了。此文为初级算法总结的子篇第六章——4个基本算法思想。 一、穷举 暴力破解,n层for循环。列举每一种可能。 例题: 鸡兔同笼:...

2018-07-29 17:17:09

阅读数:157

评论数:0

旋转图像(二维数组的旋转)——LeetCode数组算法题

旋转图像给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:给定 matrix = [ [1,2,3], [4,5,6], [7,8,9] ], 原地旋...

2018-06-20 23:13:40

阅读数:242

评论数:0

贪心算法——五大常用算法之一

贪心算法一、基本概念:    在对问题求解时,总是做出在当前看来是最好的选择。不从整体最优上加以考虑,所做出的仅是在某种意义上的局部最优解。    贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即...

2018-06-20 16:34:45

阅读数:241

评论数:0

打家劫舍——动态规划(java实现)

 打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 ...

2018-06-18 16:20:34

阅读数:605

评论数:0

动态规划——五大常用算法之一

动态规划1、基本概念:动态规划就是:每走一步,都会根据之前的情况来决定这一步的走向,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。2、基本思想与策略:与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任...

2018-06-18 16:19:50

阅读数:236

评论数:0

爬楼梯——动态规划(java)

  爬楼梯假设你正在爬楼梯。需要 n 步你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。 1. 1 步 + 1 步 2. 2 步示例 2:输入: 3 输出: 3...

2018-06-18 16:09:58

阅读数:427

评论数:0

分治算法——五大常用算法之一

分治法首先看一下二分搜索:一串数字,从中间分成两半,再两半……这样查找就是分治思想:把一个问题分解成若干个一样的小块。1、基本概念:把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题。直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。2、分治经典问题1.二...

2018-06-18 15:44:05

阅读数:61

评论数:0

斐波那契数列——递归和递推双解决

斐波那契数列: 第n项等于n-1和n-2项之和 F(n) =  F(n-1)+ F(n-2); 解题:关键代码如下 递归解决: public static void main(String[] args) { int m = f(18); System.out.println...

2018-06-18 13:52:00

阅读数:37

评论数:0

鸡兔同笼(附java代码)——穷举法解题

穷举法:暴力破解,n层for循环。枚举每一种可能。例题:鸡兔同笼:一个笼子有35个头,94只脚,问鸡和兔各有多少?解题:数学方法:设鸡i只,兔j只,方程:i + j = 35   ;  2 * i + 4 * j = 94。解题思路:鸡和兔加起来35只,所以算每一种可能的脚的个数,符合就输出就可以...

2018-06-18 13:25:32

阅读数:740

评论数:0

最长公共子序列与最长连续公共子序列(java)——动态规划法

最长公共子序列:字符串a:"android"。字符串b:"random"。最长公共子序列为:ando最长连续公共子序列为:and,因为o和and之间隔开了。思想:使用动态规划法,用一个二维数组,i 行表示当前选中s1的前 i ...

2018-05-25 13:09:23

阅读数:186

评论数:0

回溯算法——五大常用算法之一

1.概念    回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回到上一步还能执行的状态,尝试别的路径。    类似于走迷宫一样,假设我们到了每一个岔路口都规定,除了走过的地方,按照先往上走到底,如果不能走,在退回到上一个岔路口,...

2018-05-20 15:55:21

阅读数:1018

评论数:0

LeetCodd——单词搜索(java)——回溯算法

单词搜索给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board = [ ['A','B','C','E'], ['S','F','...

2018-05-20 15:22:36

阅读数:255

评论数:0

LeetCodd——子集(java)——回溯算法

子集给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3] 输出: [ [3],   [1],   [2],   [1,2,3],   [1,3],   [2,3],   [1,2],   [] ]思...

2018-05-20 15:08:40

阅读数:431

评论数:0

LeetCodd——全排序(java)——回溯算法

全排列给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 思路:还是排列组合问题,用回溯法,但注意的是,遇到重复的要跳过代...

2018-05-19 23:20:48

阅读数:244

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭