数据结构学习(第一天)

数据结构的引出:

基础知识点(补充)

方法和函数:

方法(method):依赖对象来调用的函数,所以方法是一种特殊的函数。
函数(function):拥有独立功能的代码块,与对象无关。
通过上述的描述,我们可以明白方法是一个特殊的函数。我们的Java是一门纯面向对象的语言,所以,Java中只存在方法。而C语言中,是通过独立的代码块来执行程序的,即只存在函数。现下所流行的Python内存在函数和方法的。

常见的简单算法

1.求和:问题描述:求0到n的和

a:通过简单的数学求和公式可以求得:
不管公式多么复杂,只要是可以用数学公式来标识的,它的时间复杂度就是O(1)

public static int getSum1(int n){
		return (1+n)*n*1/2;
	}

b.通过for循环

public static int getSum2(int n) {
 	int total=0;
 	for(int i=1;i<n+1;i++){
 		total +=i;
 	}	
 	return total;
 }

c.通过递归计算求得

public static int getSum3(int n) {
 	return n>1? n+getSum3(n-1):1;
 }

2.求阶乘:
a.通过for循环求阶乘

   public static int getFact1(int n) {
   	int total=1;
   	for(int i=1;i<n+1;i++){
   		total *=i;
   	}	
   	return total;
   }
   

b.通过递归计算求得

public static int getFact2(int n) {
 	return n>1? n*getFact2(n-1):1;
 }

3.斐波那契数列:
斐波那契数列即兔子数列,指的是一组以1,1为前两项,从第三项开始每一项都等于前两项的和。示例:1,1,2,3,5,8,13,21,34…
a.通过for循环求阶乘

   public static int fib1(int n){
   	int first=1,second=1,next=0;
   	if (n <= 2){
   		return 1; 
   	}else { 
   		for (int i = 3; i <= n; i++) { 
   			next = first + second; 
   			first = second; 
   			second = next; 
   			} 
   		}
   	
   	return next;
   }
   

b.通过for循环求阶乘(改良版,减少变量的使用)

   public static int fib2(int n){
   	int a=0,b=1;
   	for(int i=0;i<n;i++){
   		b=a+b;
   		a=b-a;
   	}
   	return a;
   }
   

.通过递归计算求得

public static int fib3(int n) {
 		return n>2? fib3(n-1)+fib3(n-2):1;
 }

斐波那契时间复杂度和空间复杂度

  • 利用for循环
时间空间
O(n)O(1)
  • 利用递归
时间空间
O(2^n)O(n)
总结:

对于同一个问题来说,我们可以用很多种不同的思路去解决这个问题。解决这个问题需要我们去消耗时间和空间资源,但是对于我们的学习工作,这些资源是有限的,所以这就需要我们使用尽可能少的资源去解决问题。由此,我们就可以引入到我们接下来对于数据结构和算法的学习中去。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值