目录
1. 输出最值 ※
2. 盛最多水的容器 🌟🌟
3. 搜索旋转排序数组 II 🌟🌟
🌟 每日一练刷题专栏 🌟
Golang每日一练 专栏
Python每日一练 专栏
C/C++每日一练 专栏
Java每日一练 专栏
1. 输出最值
编写一个字符界面的Java Application 程序,接受用户输入的10个整数,并输出这10个整数的最大值和最小值。
出处:
https://edu.csdn.net/practice/27729476
代码:
import java.util.Scanner;
public class MaxMin {
public static void main(String[] args) {
Arrays array = new Arrays();
array.setArr();
int max=array.getMax();
int min=array.getMin();
System.out.println("数组中最大值="+max);
System.out.println("数组中最小值="+min);
}
}
class Arrays {
private int[] arr;
public Arrays() {
arr = new int[10] ;
for(int i = 0; i<arr.length;i++) {
arr[i] =0;
}
}
public void setArr() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入数组元素的值:");
arr = new int[10] ;
for(int i = 0; i<arr.length;i++) {
arr[i] = sc.nextInt();
}
}
public int getMax() {
int max = arr[0];
for(int i : arr) {
if(max < i)
max = i;
}
return max;
}
public int getMin() {
int min= arr[0];
for(int i : arr) {
if(min > i)
min= i;
}
return min;
}
}
输出:
略
2. 盛最多水的容器
给你 n
个非负整数 a1,a2,...,a
n
,每个数代表坐标中的一个点 (i, ai)
。在坐标内画 n
条垂直线,垂直线 i
的两个端点分别为 (i, ai)
和 (i, 0)
。找出其中的两条线,使得它们与 x
轴共同构成的容器可以容纳最多的水。
说明:你不能倾斜容器。
示例 1:
输入:[1,8,6,2,5,4,8,3,7] 输出:49 解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。
示例 2:
输入:height = [1,1] 输出:1
示例 3:
输入:height = [4,3,2,1,4] 输出:16
示例 4:
输入:height = [1,2,1] 输出:2
提示:
n = height.length
2 <= n <= 3 * 10^4
0 <= height[i] <= 3 * 10^4
出处:
https://edu.csdn.net/practice/27729477
代码:
import java.util.*;
public class Solution {
public static int maxArea(int[] height) {
int N = height.length;
int i = 0;
int j = N - 1;
int max = 0;
while (i < j) {
int c = (j - i) * Math.min(height[i], height[j]);
if (c > max) {
max = c;
}
if (height[i] > height[j]) {
j--;
} else {
i++;
}
}
return max;
}
public static void main(String[] args) {
int[] height = {1,8,6,2,5,4,8,3,7};
System.out.println(maxArea(height));
int[] height2 = {1,1};
System.out.println(maxArea(height2));
int[] height3 = {4,3,2,1,4};
System.out.println(maxArea(height3));
int[] height4 = {1,2,1};
System.out.println(maxArea(height4));
}
}
输出:
49
1
16
2
3. 搜索旋转排序数组 II
已知存在一个按非降序排列的整数数组 nums
,数组中的值不必互不相同。
在传递给函数之前,nums
在预先未知的某个下标 k
(0 <= k < nums.length
)上进行了 旋转 ,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]]
(下标 从 0 开始 计数)。例如, [0,1,2,4,4,4,5,6,6,7]
在下标 5
处经旋转后可能变为 [4,5,6,6,7,0,1,2,4,4]
。
给你 旋转后 的数组 nums
和一个整数 target
,请你编写一个函数来判断给定的目标值是否存在于数组中。如果 nums
中存在这个目标值 target
,则返回 true
,否则返回 false
。
示例 1:
输入:nums = [2,5,6,0,0,1,2], target = 0 输出:true
示例 2:
输入:nums = [2,5,6,0,0,1,2], target = 3 输出:false
提示:
1 <= nums.length <= 5000
-10^4 <= nums[i] <= 10^4
- 题目数据保证
nums
在预先未知的某个下标上进行了旋转 -10^4 <= target <= 10^4
进阶:
- 这是 搜索旋转排序数组 的延伸题目,本题中的
nums
可能包含重复元素。 - 这会影响到程序的时间复杂度吗?会有怎样的影响,为什么?
出处:
https://edu.csdn.net/practice/27729478
代码:
import java.util.*;
public class Solution {
public static boolean search(int[] nums, int target) {
int low = 0;
int high = nums.length - 1;
while (low <= high) {
while (low < high && nums[low] == nums[low + 1]) {
low++;
}
while (low < high && nums[high] == nums[high - 1]) {
high--;
}
int mid = (low + high) / 2;
if (nums[mid] == target) {
return true;
}
if (nums[mid] >= nums[0] && (target > nums[mid] || target < nums[0])) {
low = mid + 1;
} else if (nums[mid] < nums[0] && target > nums[mid] && target < nums[0]) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return false;
}
public static void main(String[] args) {
int[] nums = {2,5,6,0,0,1,2};
System.out.println(search(nums, 0));
System.out.println(search(nums, 3));
}
}
输出:
true
false
🌟 每日一练刷题专栏 🌟
✨ 持续,努力奋斗做强刷题搬运工!
👍 点赞,你的认可是我坚持的动力!
🌟 收藏,你的青睐是我努力的方向!
✎ 评论,你的意见是我进步的财富!
☸ 主页:https://hannyang.blog.csdn.net/
Golang每日一练 专栏 | |
Python每日一练 专栏 | |
C/C++每日一练 专栏 | |
Java每日一练 专栏 |