3.22总结

今天完成的任务:

力扣的数据结构每日一题,总结Java。

一、每日一题

53. 最大子数组和 - 力扣(LeetCode) (leetcode-cn.com)

解题思路

第一种:暴力

思路:

遍历所有的情况,如果遇到了更大的值就更新。但时间复杂度为n^3,超时了。

代码实现

class Solution {
    public int maxSubArray(int[] nums) {
        int sum,Max=-99999;
        for(int i=0;i<nums.length;i++)
        {
            for(int j=i;j<nums.length;j++)
            {
                sum=0;
                for(int k=i;k<=j;k++)
                {
                    sum+=nums[k];
                }
                if(sum>Max)
                Max=sum;
            }
        }
        return Max;
    }
}

第二种:动态规划(DP)

过题记录:

思路:

每次都去找以这个数结尾的最大的和,然后依次往后找以另一个数结尾的最大的和,然后进行排序,找出以每个数结尾的最大的和里面最大的数。

代码实现

class Solution {
    public int maxSubArray(int[] nums) {
        int[] dp=new int[nums.length];//开一个数组
        int max;
        dp[0]=nums[0];
        for(int i=1;i<nums.length;i++)
        {
            if(dp[i-1]>0)
            dp[i]=dp[i-1]+nums[i];
            else
            dp[i]=nums[i];
        }
        max=dp[0];
        for(int i=0;i<nums.length;i++)//后面又尝试了一下排序函数,花费的时间更长
        {
            if(dp[i]>max)
            max=dp[i];
        }
        return max;
    }
}

 二、总结Java

实践时遇到的问题:

当代码中包含汉字时,编译报错,然后用下面这种格式对文件重新编译。

javac -encoding utf-8 D:\JAVAExamples\Code1.java//编译的文件的地址

  

1.书写特点:

•一个语句可以跨越多行,只要在最后用分号结尾即可。例如

int age=25;

String name="Ligang";

String hello="你好"
    +"Java";//这个语句总体不在同一行,并且之间有空格

•但是一个字符串或者变量名不能跨越多行。例如:

String a="hahaha
   xixixi";//字符串跨越多行

String na
  me="lixian";//变量名跨越多行

 •Java与C语言一样,可以一行写多个语句,但最好不要这样做。

•Java中空格程序的编译没有影响,但是不要把一个变量名拆开,会使程序出错。

2.语言特点

•Java是强类型语言,变量必须先声明后使用,指定类型的变量只接受与之类型匹配的值。

插一条前面学C漏掉的点:

char代表字符型,实际上字符型型也是一种整数类型,相当于无符号整数类型。

•如果有一个超出整数类型范围的数,Java不会自动将它当成long类型来处理,应加一个后缀L。

long a=999999999999999;//这是错误的,系统不会自动将它当成long类型来处理

long b=999999999999999L;//这是正确的,强制使用long类型

•Java浮点数使用二进制数据的科学计数法来表示浮点数,因此可能不能精确表示一个浮点数。

当我把值5.2345556f赋给一个float型变量,输出变量时值发散生了改变。但double型的浮点数比float型的浮点数更加精确,但值发生改变(失去精度)的可能还是存在。

定义为float型时,

 定义为double型时,

 如果需要保存精确的值,建议使用Bigdecimal类,这个点后面再补。

•Java浮点型的表示

·十进制数的形式,也就是我们平时写的小数,例如5.12、512.0、.512,必须得带小数,否则会被当成int类型处理。

·科学计数法形式,5.12e2或5.12E2,而且只有浮点型的数可以用科学计数法表示

•Java的浮点型默认是double类型,如果想把一个浮点型当成float类型处理,应添加后缀f或F。

float a=5.2345556f;

•Java的三个特殊的浮点数值:正无穷大、负无穷大和非数。

具体的点看下面的代码。

public class Code1{
	public static void main(String[] args){
		double a=0.0;
		double b=Double.NEGATIVE_INFINITY;
		float c=Float.NEGATIVE_INFINITY;
		System.out.println(b==c);
        //从结果为true可以看到float和double的负无穷大是相等的
		System.out.println(a/a);
		//从结果可以看出0.0/0.0得到的是非数
		System.out.println(a/a==Float.NaN);
		//所有两个非数之间是不相等的
		System.out.println(6.0/0==555.0/0);
		//所有正无穷大都是相等的
		System.out.println(0/0);
		//除0异常
    }
}

•一个boolean类型的值和字符串进行连接运算,boolean类型的值会自动转换成字符串

public class Code1{
	public static void main(String[] args){
		String s=true+"";
		System.out.println(s);
		//一个boolean类型的值和字符串进行连接运算,boolean类型的值会自动转换成字符串
	}
}

•如果要将基本类型的值转换成字符串,可以把基本类型的值和一个空字符串用+进行连接 。

public class Code1{
	public static void main(String[] args){
		String s=12345+"";
		System.out.println(s);
		//如果要将基本类型的值转换成字符串,可以把基本类型的值和一个空字符串用+进行连接 。
		System.out.println("Hello"+3+4);
		System.out.println(3+4+"Hello");
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值