11.13-11.15学习总结

文章分享了三个编程练习题目,涉及递归求解杨辉三角第m层第n个元素,字符串A和B的排列组合,以及有序数组中的目标值搜索。展示了如何使用递归和二分查找算法解决问题。
摘要由CSDN通过智能技术生成

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.关灯后打开台灯玩手机了,玩的时间少了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值