1.11.13通知培训开过了
2.四级卷子已订正sectionB,并做了一道题型相同的题(也已订正)
3.三道算法题如下:
(1)求杨辉三角的第m层的第n个元素
需要运用递归,并且将杨辉三角的形式变一下,找出规律
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
...
public class yanghui {
public static int f(int m,int n) {
if(n==0) return 1;//第二步加上判断 n减到0时说明到了第0行,仅有1一个元素
if(m==n) return 1; //m-1与n-1相同时,则求的是第1行的元素,第一行为11
//由杨辉三角的变形形式可以看出,第m行有m+1个元素(m从0开始)
//第m行第n个元素等于上一行本位+前一位之和
return f(m-1,n)+f(m-1,n-1); //第一步,先把核心递归语句写出来
}
public static void main(String[] args) {
int level = 5;//行数
for(int i=0;i<=level;i++) {
System.out.print(f(level,i)+" ");
}
System.out.println();
System.out.print(f(level,2));
}
}
(2)求m个A与n个B能组成多少种排列
也是用到递归
public class aabb {
public static int g(int m,int n) {
/*该字符串共有m+n个字母,每一位只有A/B两种选择
题目只求排列的个数,不需要全部打印,所以可以用递归
若第一位是A,则还剩下m-1个A,同理第一位是B则剩下n-1个B
*/
if(m==0) return 1;//全剩下B,则只有1钟排列
if(n==0) return 1;//全剩下A则只有1钟排列
return g(m-1,n)+g(m,n-1);
}
public static void main(String[] args) {
System.out.println(g(3,2));
}
}
(3)给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
示例 1:
输入: nums = [-1,0,3,5,9,12], target = 9 输出: 4 解释: 9 出现在 nums 中并且下标为 4
示例 2:
输入: nums = [-1,0,3,5,9,12], target = 2 输出: -1 解释: 2 不存在 nums 中因此返回 -1
考查二分查找
题目中若给了有序数组,则可以考虑二分
public class nums {
public static int solution(int[] nums,int target) {
if((target<nums[0])||(target>nums[nums.length-1])) return -1;
//小于第最小的大于最大的则返回-1
int left=0;
int right=nums.length-1;
while(left<=right) {
int mid = left + (right-left)/2;
if(target==nums[mid]) {
return 1;
}else if(target>nums[mid]) {
left=mid+1; //注意while里是left<=right,则target的查找范围在[left,right]
}else if(target<nums[mid]) {
right=mid-1;
}
}
return -1;
}
public static void main(String[] args) {
int nums[] = {-1,0,3,5,9,12};
int target = 9;
System.out.println(solution(nums,target));
}
}
对于while(left<=right)与while(left<right)的left 与 right
while(left<=right) target∈[left,right] left = mid+1,right = mid-1;
就是target可以和mid+1与mid-1比较
while(left<right) target∈[left,right) left=mid+1,right=mid;
就是当target<nums[mid]时,target不能与right比较,可以与mid-1比较
4.关灯后打开台灯玩手机了,玩的时间少了