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;
}
}