Java笔记7.15

Python publisher01 28℃ 0评论

前言

因为只是随便看一下基础语法然后就来刷题了,java水平菜的扣脚,所以目前只刷了一些简单题。

参考教程

W3Cschool

斐波那契数

斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0, F(1) = 1
F(N) = F(N – 1) + F(N – 2), 其中 N > 1.
给定 N,计算 F(N)。

代码如下:

class Solution {
    public int fib(int N) {
        if(N==0) return N;
        if(N==1) return N;
        int[] arr = new int[3];
        arr[0]=0;
        arr[1]=1;
        arr[2]=1;
        for(int i=2;i<N;i++){
            arr[0]=arr[1];
            arr[1]=arr[2];
            arr[2]=arr[0]+arr[1];
        }
        return arr[2];
    }
}

这是一题很经典的题目,在学c的时候这道题老师教的是用的递归,而在python中因为数组是动态的,直接循环分割数组最后两项然后追加即可,而java中我用了一种比较容易想到的办法,
当N为0,1时分别返回0,1;当N>=2时创建一个长度为3的数组,开启循环,最后返回数组的最后一项。

三角形的最大周长

给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的、面积不为零的三角形的最大周长。
如果不能形成任何面积不为零的三角形,返回 0。

代码如下:

class Solution {
    public int largestPerimeter(int[] A) {
        Arrays.sort(A);
        int i=A.length;
        if(i<3) 
        {
            return 0;
        }
        for(i=A.length-3;i>=0;i--){
            if(A[i]+A[i+1]>A[i+2])
            {
                return A[i]+A[i+1]+A[i+2];
            }
        }
        return 0;
    }
}

一开始想到先对数组进行排序然后再遍历返回最大值,所以是先用了冒泡排序,后来查阅发现数组有sort方法可以直接进行排序。

移除元素

给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

代码如下:

class Solution {
    public int removeElement(int[] nums, int val) {
        Arrays.sort(nums);
        int i=0;
        for(int j=0;j<nums.length;j++){
            if(nums[j]!=val){
                nums[i]=nums[j];
                i++;
            }
        }
        return i;
    }
}

题目描述看起来很厉害但实际上就是判断一个数是否在数组内。我是以创建快慢两个索引的方式,一个进行遍历,判断当前索引指向的元素不等于所给的元素时,将当前元素赋给慢索引指向的元素,然后慢索引自增。

你或许想:《去原作者写文章的地方

转载请注明:Python量化投资 » Java笔记7.15

喜欢 (0)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址