《算法》第四版阅读笔记

《算法》第四版阅读笔记

第1章 基础

1.1 基础编程模型

1.1.1 java程序的基本结构

七种语法:

  • 原始数据:整形、浮点型、布尔值;
  • 语句:声明、赋值、条件、循环、调用、返回;
  • 数组:同种数据类型的值得集合;
  • 静态方法:封装并重用代码;
  • 字符串:java内置一些操作;
  • 标准输入/输出:与外界联系的桥梁;
  • 数据抽象:支持面向对象的编程。
1.1.2 原始数据类型与表达式

4种java语言原始数据类型:

  • 整形(int):32位 (不根据机器改变) − 2 31 -2^{31} 231~ + 2 31 + 1 +2^{31}+1 +231+1中的整形,运算符:+、 − - 、*、/、 %,举例:5/3=1,5%3=2;

  • 双精度实数类型(double):64位,IEEE 754标准,运算符:+、 − - 、*、/,举例:6.0/3=2.0;

  • 布尔类型(bool):true或false,运算符:&&、||、!、^(异或),举例:true^true=false;

  • 字符型(char):16位。

其他数据类型:long(整形64位)、float(32位单精度实数)、byte(整形8位)……

1.1.3 语句

声明语句:

int i;double c;
int a=2;//声明并初始化

赋值语句:

i=3;//注意和初始化的区别
++i;//隐藏赋值,i--,i+=2

条件语句:

if(x<0) x=-x;//if语句
if(x>y) max=x;
else max=y;//if-else语句

循环语句:

//while语句
int v=0;
while(v<N)
	v=v+2;
//for语句
for(int i=1;i<=N;++i)
	sum+=1.0/i;

1.1.4 数组

数组的声明、创建、初始化:

double[] a;//声明数组
a=new double[N];//创建数组
for(int i=0;i<N;++i)
	a[i]=0.0;//初始化数组
double[] b=new double[N];//声明并创建
int[] a={1,1,2,3,4,5,8};//声明并初始化

数组的使用:

a.length获取数组a[]的长度,数组元素下标为0~a.length-1.超出下标范围抛出越界异常。

起别名:

int[] a=new int[N];
a[i]=1234;
int[] b=a;

此时的代码中只有一个数组,b是a数组的别名,都指向同一个数组,因此若改变b中的值,a数组中的值也相应改变。

b[i]=4567;//此时a[i]也等于4567

若想复制一份数组,应该深拷贝,如使用for循环一一复制过去。

1.1.5 静态方法(函数)
public static int gcd(int a,int b)//辗转相除法求最大公倍数(递归方法)
{
if(q==0)return p;
else return (q,p%q);
}
1.1.8 字符串
  • 字符串的拼接:重载了+运算符,拼接两个String类型;

    "hello"+"world"="helloworld";
    "1+2="+3="1+2=3";
    
  • 类型转换:

    int a=1234;
    String s="5678";
    a=parseInt(s);//a此时为5678,转换成double类型类似为parseDouble(),
    a=1234;
    s=toString(a);//s此时为"1234"
    
1.1.10 二分查找
 public static int rank(int key,int[] a)
    {
        int lo=0;
        int hi=a.length-1;
        while(lo<=hi)
        {
            int mid=lo+(hi-lo)/2;
            if(key<a[mid])hi=mid-1;
            else if(key>a[mid])lo=mid+1;
            else return mid;
        }
        return -1;
    }

二分查找的演示

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值