java基础复习笔记 数据结构_算法与数据结构细节复习笔记(Java实现)

本笔记涉及代码:https://github.com/hackeryang/Algorithms-Fourth-Edition-Exercises

1.Java中的length属性是针对数组说的,比如说声明了一个数组,想知道这个数组的长度则用到了length这个属性,例如有个数组int[] a,那么a的长度就是a.length。length()方法是针对字符串String说的,如果想看这个字符串的长度则用到length()这个方法。size()方法是针对泛型集合说的,如果想看这个泛型有多少个元素,就调用此方法来查看,例如:

List array=new ArrayList();

array.add(a);

System.out.println(array.size());

2.利用牛顿迭代法求平方根:

package Chapter1_1Text;

public class SqrtNewton { //利用牛顿迭代法求平方根

public static double sqrt(double c){ //c为要开方的数,如2则计算根号2

if(c<0) return Double.NaN;

double err=1e-15; //接近于0的数

double t=c;

while(Math.abs(t-c/t)>err*t) //随着迭代t会变,c/t越来越接近要计算的开平方值t,误差超过err*t时就继续迭代计算,误差小于这个值则代表结果足够接近

t=(c/t+t)/2.0; //详细公式解释链接:https://www.zhihu.com/question/20690553

return t;

}

public static void main(String[] args){

SqrtNewton a=new SqrtNewton();

System.out.println(a.sqrt(2));

}

}

3.颠倒数组元素的顺序:

package Chapter1_1Text;

public class SwapArray { //颠倒数组元素的顺序

public static void main(String[] args){

double[] a=new double[10];

int N=a.length;

for(int i=0;i

double temp=a[i];

a[i]=a[N-1-i];

a[N-i-1]=temp;

}

}

}

4.随机将double数组中的元素排序:

package Chapter1_1Text;

import edu.princeton.cs.algs4.StdRandom;

public class Shuffle { //随机将double数组中的元素排序

//随机将double数组中的元素排序

public static void shuffle(double[] a){

int N=a.length;

for(int i=0;i

//将a[i]和a[i+N-1]中任意一个元素交换

int r=i+ StdRandom.uniform(N-i);

double temp=a[i];

a[i]=a[r];

a[r]=temp;

}

}

}

5.Double变量初始化为无穷大:使用Double.POSITIVE_INFINITY和Double.NEGATIVE_INFINITY。

6.1/0与1.0/0.0结果不同,前者会产生运行时除以零异常,会终止程序;而后者的结果是Infinity。

7.For循环与等价的while形式的区别:for循环头部的代码与for循环的主体代码在同一个代码段之中,递增变量在一般循环结束之后是不可用的,但是在等价的while循环中,递增变量在循环结束之后依然是可用的。

8.将一个数字转换为二进制:

package Chapter1_1Low;

import edu.princeton.cs.algs4.StdOut;

public class DecimalToBinary { //将一个数字转换为二进制

public static String decimalToBinary(int n){

String resultString="";

for(int i=31;i>=0;i--)

resultString=resultString+(n>>>i&1); //将整数每一个高位右移至相应的最低位再“与”1,结果转换为字符串从左到右排列输出,依然是原来的二进制

return resultString;

}

public static void main(String[] args){

StdOut.println(decimalToBinary(97));

}

}

9.矩阵转置:

package Chapter1_1Low;

public class ArraySwap { //矩阵转置

public static void main(String[] args){

int[][] a={{1,2,3},{4,5,6}};

int[][] temp=new int[a[0].length][a.length]; //三行二列

for(int i=0;i

for(int j=0;j

temp[i][j]=a[j][i];

System.out.print(temp[i][j]+" ");

if(j==a.length-1)

System.out.print("\n");

}

}

}

}

10.柱状图的实现:

package Chapter1_1Low;

public class Histogram { //柱状图的实现

public static int[] histogram(int[] a,int M){

int[] b=new int[M];

int n=0;

int m=0;

for(int i=0;i

for(int j=0;j

if(i==a[j]){

n++;

}

b[i]=n;

}

n=0;

}

for(int i=0;i

m=m+b[i];

}

return b;

}

public static int[] histogram2(int[] a,int M){

int[] h=new int[M];

int N=a.length;

for(int i=0;i

if(a[i]

h[a[i]]++;

return h;

}

public static void main(String[] args){

int a[]={1,2,3,4,5,6,7,8,9,10,11,11,11,12};

int M=13;

int b[]=histogram(a,M);

System.out.println("调用函数后获取的数组:");

for(int i=0;i

System.out.println(b[i]);

}

}

}

11.二分查找算法,每递归二分一次,输出就缩进一个空格:

package Chapter1_1Low;

public class Rank { //二分查找算法,每递归二分一次,输出就缩进一个空格

public static int rank(int key,int[] a){

return rank(key,a,0,16,1);

}

public static int rank(int key,int[] a,int lo,int hi,int deep){

//如果key存在于a[]中,它的索引不会小于lo且不会大于hi

if(lo>hi)

return -1;

int mid=lo+(hi-lo)/2;

for(int i=0;i

System.out.print(" ");

System.out.println("lo: "+lo+" hi: "+hi);

if(key

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值