
数据结构和算法
coderLee0607
do more and get more.
展开
-
时间复杂度详解
算法的时间复杂度和空间复杂度合称为算法的复杂度。1.时间复杂度(1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频转载 2017-03-14 16:21:22 · 402 阅读 · 0 评论 -
排序算法(四种)
一、 冒泡排序冒泡排序是非常容易理解和实现,以从小到大排序举例:设数组长度为N。冒泡排序从前往后遍历和从后往前遍历一样的原理。目标数组:3,5,2,6,4,9,7,12,11从前往后:第一波:从第一个数开始,如果第一个数大于第二个数,就把这两个数调换位置,否则保留之前的排列,第二次把第二个和第三个数比较,比较方式同上,这样经过第一波比较后,留在最后面的数是整个数组中最大的数;第二波...原创 2018-04-25 10:23:09 · 595 阅读 · 0 评论 -
二分查找算法(递归-非递归)
二分查找( binary search)先来个比较官方的解释:二分搜索(英语:binary search),也称折半搜索(英语:half-interval search)、对数搜索(英语:logarithmic search),是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大...原创 2018-04-25 10:19:49 · 479 阅读 · 0 评论 -
二叉树的四种遍历方式java实现
二叉树的定义 二叉树(binary tree)是结点的有限集合,这个集合或者空,或者由一个根及两个互不相交的称为这个根的左子树或右子树构成. 从定义可以看出,二叉树包括:1.空树 2.只有一个根节点 3.只有左子树 4.只有右子树 5.左右子树都存在 有且仅有这5中表现形式 二叉树与一般树的区别一般树的...原创 2018-04-25 10:18:01 · 447 阅读 · 0 评论 -
求阶乘递归和非递归方式
public class JieCheng { /** * @param args * @author lee 2017年3月31日 下午7:27:44 */ public static long jicheng(int n) { //递归方式 if(n==1) { return 1; } else { return n*...原创 2018-04-25 10:15:11 · 372 阅读 · 0 评论 -
搬圆桌问题
题目描述现在有一张半径为r的圆桌,其中心位于(x,y),现在他想把圆桌的中心移到(x1,y1)。每次移动一步,都必须在圆桌边缘固定一个点然后将圆桌绕这个点旋转。问最少需要移动几步。输入描述:一行五个整数r,x,y,x1,y1(1≤r≤100000,-100000≤x,y,x1,y1≤100000)输出描述:输出一个整数,表示答案输入例子:2 0 0 0 4输出例子:1package test2;...原创 2018-04-25 10:13:23 · 420 阅读 · 3 评论 -
寻找第一次重复出现字符
题目描述对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符。给定一个字符串(不一定全为字母)A及它的长度n。请返回第一个重复出现的字符。保证字符串中有重复字符,字符串的长度小于等于500。测试样例:"qywyer23tdd",11返回:y算法实现代码:package test2;public class FindStr { public static void main(String...原创 2018-04-25 10:11:33 · 1530 阅读 · 0 评论 -
字符串数组和整数数组对应时按序输出字符串数组
题目描述:代码实现:主要是实现Comparable接口,并重写compareTo方法,利用数组中的Arrays.sort方法进行排序即可。package com.test;import java.util.Arrays;/** * 有个字符串数组,string[] str = {A,B,C,D,E,F,G,H};,数组分别对应一个整数数组,int[] a = {3,2,6,4,8,9,1,2...原创 2018-04-25 10:09:16 · 375 阅读 · 0 评论 -
排序算法的时间复杂度和空间复杂度
1、 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法, 冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。2、研究排序算法的稳定性有何意义? 首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前两个相等的数据其在序列中的先后位置顺序与排序后它们两个先后位置顺序相同。再简单具体一点,如果A i == A j,Ai 原原创 2017-03-15 22:27:32 · 417 阅读 · 0 评论 -
合并排序解析
合并排序,顾名思义,就是通过将两个有序的序列合并为一个大的有序的序列的方式来实现排序。合并排序是一种典型的分治算法:首先将序列分为两部分,然后对每一部分进行循环递归的排序,然后逐个将结果进行合并。 合并排序最大的优点是它的时间复杂度为O(nlgn),这个是我们之前的选择排序和插入排序所达不到的。他还是一种稳定性排序,也就是相等的元素在序列中的相对位置在排序前后不会发生变化。他的唯一转载 2017-04-01 10:47:58 · 1299 阅读 · 0 评论 -
简明解释算法中的大O符号
2009年1月28日Arec Barrwin在StackOverflow上提问,“有没有关于大O符号(Big O notation)的简单解释?尽量别用那么正式的定义,用尽可能简单的数学来解释”。在经过众多热心网友的修改更新后,最佳回复的得分已高达 3234 分,详细内容,请见下文。最佳回复所给出的大O符号的最简单定义如下:大O符号是一种算法复杂度的相对表示方式。这个句子里转载 2017-04-01 10:35:46 · 1103 阅读 · 0 评论 -
算法题:有 10个人围成一个圈,从 1 开始报数,报到 4 的这个人就要退出。然后其他人重新开始, 从 1 报数,到 4 退出。问:最后剩下的是 10 人中的第几个人?
import java.util.ArrayList;public class ss { /** * 有 10个人围成一个圈,从 1 开始报数,报到 4 的这个人就要退出。然后其他人重新开始, * 从 1 报数,到 4 退出。问:最后剩下的是 10 人中的第几个人? * @param args */ public static voi...原创 2019-06-05 10:57:37 · 2289 阅读 · 0 评论