算法

1.给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

分析:已知数组有序,count+1用来记录数组的长度(count对应数组下标),j用来遍历数组。若count位置的数字等于j位置的数字,说明该数字重复出现,不做处理。若count位置的数字不等于j位置的数字,说明该数字没有重复,需要将j位置的数字放到count+1位置。

eg:nums = [0,0,1,1,1,2,2,3,3,4],函数应被返回的数组长度为5,原数组被修改为[0,1,2,3,4]

 

public static int removeDuplicates(int[] arr){
        int count=0;
        for(int j=0;j<arr.length;j++){
            if(arr[j]!=arr[count]){
                count++;
                arr[count]=arr[j];
            }
        }
        count++;
        return count;
    }

2.剑指offer 8:跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

分析:1级台阶,有1种跳法;2级台阶有2种跳法。实际上是一个斐波那契数列,1,2,3,5....

注释掉的是递归方法实现的,下边是用循环方法实现的。

public class Solution {
    public int JumpFloor(int target) {
        /**if(target==1){
            return 1;
        }
        if(target==2){
            return 2;
        }
        return JumpFloor(target-1)+JumpFloor(target-2);**/
        int prenum=1;
        int num=2;
        int result=0;
        if(target==1){
            return 1;
        }
        if(target==2){
            return 2;
        }
        for(int i=3;i<=target;i++){
            result=prenum+num;
            prenum=num;
            num=result;
        }
        return result;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值