![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
Lee_Lemon
这世上的每个人都很忙,没人会注意你.
展开
-
算法 -- 0-1背包问题之动态规划
本来周五要完成0-1背包问题,由于自己的某些事情耽搁.以后要严格要求自己喽!!! 下面我们一起来学习0-1背包问题: 问题描述: 有N件物品和一个容量为c的背包。第i件物品的重量是w[i],价值是v[i]。求解将哪些物品装入背包可使价值总和最大。之所以称为”0-1背包问题”表示该问题只有两种结果:装或者不装即0或者1. 基本思路: 该问题中,每一种物品只有一件,同时选择只有放和不放. 实现过原创 2015-11-23 00:59:33 · 620 阅读 · 0 评论 -
查找一个数组的K大值
前面有一篇博客,实现了如何处理寻找数组第二大数据,但是当寻找第三大、第四大时,那样的思想便存在一大缺点(if-else结构情况很多)!!!#include <stdio.h>// 快排将数组调整为降序数组。 // 快速排序有一个特点:每一趟一定会将一个元素放在最终位置(每一趟的low表示该确定位置元素的下标)。 int quick (int array[], int left, int right,原创 2017-02-27 17:47:26 · 267 阅读 · 0 评论 -
寻找一个数组中的次大值
实现时间复杂度为O(n)的一个算法求得数组的次大值。#include <stdio.h>int getMax2 (int array[], int n) { if (n<=1) { return -1 ; } if (array[0]>array[1]) { max=array[0] ; max2=array[1] ;原创 2017-02-27 11:48:47 · 1248 阅读 · 0 评论 -
反转单链表
实现将一个单链表反转,并输出反转厚的单链表。#include <stdio.h> #include <malloc.h>struct stud { int num ; struct stud *next ; } ; // 核心函数:反转单链表 void reverse (struct stud * head) { struct stud *cur , *p ; cur原创 2017-02-27 10:36:13 · 300 阅读 · 0 评论 -
非递归二分查找
作为一名程序员,重新找回自己敲代码的感觉,做最好的自己。#include <stdio.h>int binary(int *array, int n, int num) { int low = 0, mid = 0, high = n-1 ; while (low<=high) { mid = (low+high)/2 ; if (array[mid]原创 2017-02-26 21:33:03 · 175 阅读 · 0 评论 -
算法 -- 求两个等长数组的中位数
求中位数问题描述 已知两个等长度且均有序的数组a与b,它的长度为N,请计算出这两个数组所有元素的中位数. 易错细节 我刚开始采取的策略是:中位数靠左处理.这句话的含义就是:如果是偶数个,则去中间两个元素的前一个. 例如: a数组 {1 2 3 4} 和 b数组 {3 4 5 6} 在这样的处理思想下,由于a 数组中位数为2, b数组中位数为4, 比原创 2015-12-02 22:09:32 · 1265 阅读 · 0 评论 -
算法 -- 快速排序
引言: 排序算法很久没有些过啦,前段时间写了最基础的选择排序和冒泡排序,当时写它们就是为了找感觉.于是今天复习了快速排序的算法.算法思想: 其实它的思想也很简单: 1.自己确定一个标志数key作为比较对象. 2.从最后一个开始,寻找第一个小于key的,并将其放在当前first上. 3.从第一个开始,寻找第一个大于key的,并将原创 2015-11-30 22:01:26 · 304 阅读 · 0 评论 -
算法 -- 数字三角形之动态规划
好久没有好好写算法啦,因此今天晚上就思考实现老师说的一道算法题目: 用动态规划求解数字三角形. 下面简单描述下题目含义: 数字三角形中的数字要求为不超过100的非负整数.题目规定从最顶层开始往下走,选择一条路径,这条路径要求每一步沿着左斜线或者右斜线走,并且路径上的数字之和为最大值. 例如下面这样一个三角形: 1. 7 2. 3 8 3. 8 1 0 4. 2 7 7原创 2015-11-20 01:10:22 · 4248 阅读 · 1 评论 -
算法 -- 归并排序之自然排序
定义: 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个典型应用.应该将已经有序的子序列合并,得到完全有序的序列:即先使每个子序列有序,再使子序列段间有序.若将两个有序表合并成一个有序表,称为二路归并. [摘录于维基百科] 无论哪一种归并算法的实现,它都需要用到一个MergeArray函数实现两个有序数组的合并.如下:原创 2015-10-26 13:28:43 · 5594 阅读 · 0 评论 -
判断两个链表是否相交并找出交点
点击链接:判断两个链表是否相交并找出交点问题描述:一个比较经典的问题,判断两个链表是否相交,如果相交找出他们的交点。第一种情况:两个链表均不含有环 思路:1、直接法采用暴力的方法,遍历两个链表,判断第一个链表的每个结点是否在第二个链表中,时间复杂度为O(len1*len2),耗时很大。2、hash计数法如 果 两个链表相交,则两个链表就会有共同的结点;而结点地址又是结点唯一标识。因而判断两个链转载 2017-03-14 12:59:03 · 524 阅读 · 0 评论