作业【方法递归+数组练习】

作业1 方法递归

1.青蛙跳台阶问题

青蛙一次可以跳一个台阶,也可以一次跳两个台阶,n个台阶有多少种跳法
【其实规律数是斐波那契数列 1 2 3 5】

方法1:【总跳法=一次跳一步的跳法 + 一次跳两步的跳法】

 public static int frogJump(int n) {
        if (n==1) {
            return 1;
        }
        if (n==2) {
            return 2;
        }
        return frogJump(n-1) + frogJump(n-2); //一次跳一步的跳法+一次跳两步的跳法
    }

    public static void main(String[] args) {
        System.out.println(frogJump(4));
    }

方法2:【循环:斐波那契数列】

 public static int frogJump(int n) {
        if (n==1) {
            return 1;
        }
        if (n==2) {
            return 2;
        }
        int f1 = 1;;
        int f2 = 2;
        int f3 = f1 + f2;
        for (int i = 3; i <= n; i++) {
            f3 = f1 + f2;
            f1 = f2;
            f2 = f3;
        }
        return f3;
    }

    public static void main(String[] args) {
        System.out.println(frogJump(4));
    }

2. 创建一个int类型的数组,元素个数为100,并把每个元素一次设置为1-100

 public static void initArray(int[] array) {
        for (int i = 0; i < array.length; i++) {
            array[i] = i + 1;
        }
    }

    public static void main(String[] args) {
        int[] array = new int[100];
        initArray(array);
        System.out.println(Arrays.toString(array));
    }

作业2 数组练习

1.判断数组是否存在连续的三个奇数【与】

 public static boolean isOdd(int[] array) {
        if(array == null) return false;
        int count = 0;//目前连续的奇数为0
        for (int i = 0; i < array.length; i++) {
            if ((array[i] & 1) == 1) {  //一个数与1等于1则为奇数
                count++;
            }else {
                count = 0;
            }
            if (count == 3) {
                return  true;
            }
        }
      return false;
    }

    public static void main(String[] args) {
        int[] array = {1,3,5,6};
        System.out.println(isOdd(array));

    }

2.找到一个数组中的多数元素

多数元素是指在一个大小为n的数组中出现次数大于n/2的元素

  public static int findNum(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            int count = 0;  //每次查找完要重置为0
            for (int j = i; j < arr.length; j++) {
                if (arr[i] == arr[j]) {
                    count++;
                }
            }
            if (count > arr.length / 2) {
                return arr[i];
            }
        }
        return -1; //代表没有找到多数元素
    }

    public static void main(String[] args) {
        int[] arr = {1,3,3,3,4};
        System.out.println(findNum(arr));
    }

3. 只出现一次的数字【异或】

给定一个非空数组,除了某个元素只出现一次外,其余每个元素均出现两次,找出只出现一次的元素

 public static int func(int[] arr) {
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum = sum ^ arr[i];
        }
        return sum;
    }

    public static void main(String[] args) {
        int[] arr = {1,1,4,4,6};
        System.out.println(func(arr));
    }

4.两数之和

给定一个整数数组nums和一个整数目标值target,请在该数组中找出和为目标值target的那两个数,并返回它们的数组下标。【假设只会对应一个答案】

 public static int[] func1(int[] arr,int target) {
        int[] nums = {-1,-1};
        for (int i = 0; i < arr.length; i++) {
            for (int j = i+1; j < arr.length ; j++) {
                if (arr[i] + arr[j] == target) {
                    nums[0] = i;
                    nums[1] = j;
                    return nums;
                }
            }
        }
        return nums;
    }

    public static void main(String[] args) {
        int[] arr = {1,3,5,6};
        //func1(arr,8);
        System.out.println(Arrays.toString(func1(arr, 8))); //返回数组的话要用Arrays.toString
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值