数据结构与算法
文章平均质量分 53
ChuanjieZhu
这个作者很懒,什么都没留下…
展开
-
算法系列(四)归并排序及其改进(java实现)
前言:算法第四版2.2节 归并排序学习总结归并排序:将两个有序的数组归并成一个更大的有序数组。采用分治(divide and conquer)策略,利用递归每次将数组分成两半,直到子数组个数为1(1个元素的数组自然就有序的),将结果归并再返回。性能:所需时间与NlogN成正比(N为数组大小);所需额外空间与N成正比。当所有元素都相同时,归并排序的运行时间是线性的。归并两个有序数组的me原创 2017-09-04 12:41:52 · 1603 阅读 · 2 评论 -
字符串反转,c和c++实现
区别在于用char* 还是stringc语言:char* reverseString(char* s) { int len = strlen(s); int i = 0; char ch; while (i < len / 2) { ch = *(s + i); *(s + i) = *(s + len - 1 - i); *(s + len - 1 - i) = ch;...原创 2018-07-07 12:10:25 · 301 阅读 · 0 评论 -
大数相加——string的使用(C++)
#include <iostream>#include <string>using namespace std;//---------大数相加——利用字符串void bigAdd(string num1,string num2,string &res){ int carry=0; int len1=num1.length()-1; int len2=n...原创 2018-04-13 22:14:21 · 1619 阅读 · 3 评论 -
全排列
123的全排列:固定第一个数,求剩下数的全排列,依次类推,这是一个递归。每一个数都要做一下第一个数,需要一个for循环,在里面swap。当只剩一个数的时候,全排列是它自己,退出。123132213231312321需要注意的是:123让2当老大,得到213,当你要让3当老大的时候,要先把数列还原为123。vector<vector<int> > pv;void perm(...原创 2018-03-26 15:26:11 · 237 阅读 · 0 评论 -
明明的随机数(华为)
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。 Input Param n 输入随机数的...原创 2018-03-21 20:39:08 · 13291 阅读 · 2 评论 -
算法系列(五)快速排序及其改进(Java实现)
前言:快速排序是C.A.R Hoare于1960年发明的。基本思想也是分治。快速排序不需要额外的空间,是原地排序,时间复杂度是O(NlgN),快速排序快在元素之间是跳跃比较,比较的次数将会减少,内循环短小。在实际应用中,比其他排序算法都要快得多。快速排序:对于待排数组a,长度为N,1,首先,选定一个元素作为固定的比较对象,我们称之为基准元素 v。选定两个变量 i , j原创 2017-10-17 18:14:36 · 1239 阅读 · 0 评论 -
算法系列(二)冒泡排序、选择排序、插入排序和希尔排序(Java实现)
前言:算法第四版2.1节 初级排序算法 学习总结选择排序:1.找到数组中最小的元素与数组中第一个元素交换位置2.在剩下的元素中找到最小的元素和数组中第二个元素交换位置3.以此类推速度:对于大小为N的数组,需要N^2/2次比较和N次交换。(数据移动是最少的)/** * 选择排序 * @author Chuanjie * */public class Selectio原创 2017-08-31 21:45:51 · 283 阅读 · 0 评论 -
算法系列(一)背包、队列和栈(Java实现)
前言:算法第四版1.3节 背包、队列和栈 学习总结Stack:import java.util.Iterator;/** * 动态调整数组大小的栈 * 功能: LIFO * @author Chuanjie * @param * */public class ResizingArrayStack implements Iterable { private T[] a原创 2017-08-31 11:38:56 · 432 阅读 · 0 评论 -
算法系列(三)插入排序的两种改进:规避边界检测和取消交换(Java实现)
前言:算法第四版习题2.1.24插入排序的哨兵和习题2.1.25不需要交换的插入排序规避边界检测:在插入排序的实现中先找到最小的元素并将其置于数组的第一个位置,可以省掉内循环的判断条件 j>0 。能够省略判断条件的元素称为哨兵。public class Exer24 { public static void sort(Comparable[] a){ int N = a.l原创 2017-09-02 18:02:44 · 1372 阅读 · 1 评论 -
爬楼梯问题/上台阶问题
商汤科技的笔试题。n阶,步长1~m,有时间和内存限制。基础题:n阶楼梯,每次能走1或2阶,问走到n阶一共多少种走法。法一:递归 很容易超时f(0)=1,f(1)=1,f(n)=f(n-1)+f(n-2)#include <stdio.h>#include <iostream>#include<Windows.h>using names...原创 2018-09-08 18:48:08 · 1950 阅读 · 0 评论