作业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
}