1、C/C++程序填空题(20分)
大体是一个递归调用,需要填写递归调用的参数。
2、交换扑克牌(20分)
给定了两数组,规定只能交换一个元素,使得两个数组的总和相同。
3、盛水最多的容器(leetcode10)(30分)
题目:
给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
注意:你不能倾斜容器,且 n 的值至少为 2。
示例:
输入:[1, 8, 6, 2, 5, 4, 8, 3, 7]
输出:49
思路:
双索引技术,引入左指针l(记录左边元素的下标)、右指针r(记录右边元素的下标),具体过程如下:
①取出左右两边的元素,求出maxArea;
②判断左右元素的大小,如果左边元素大于右边元素,则右指针左移;如果右边元素大于左边元素,则左指针右移。
③每次移动之后再求一次maxArea,与之前的maxArea进行比较,取最大值;
④重复②③过程,直到遍历完成,返回maxArea;
代码如下:
package com.haobi;
import java.util.Scanner;
//3、盛水最多的容器(leetcode10)
public class Test2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
String[] s = str.split(",")