Java每日一练(20230513) 输出最值、盛水容器、旋转数组II

简介: Java每日一练(20230513) 输出最值、盛水容器、旋转数组II

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,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。


说明:你不能倾斜容器。


示例 1:

68b73af992268f52fa1d1edf7891fcc2.jpeg


输入:[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

目录
相关文章
|
2天前
|
存储 安全 Java
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
|
3天前
|
Kubernetes Java 调度
Java容器技术:Docker与Kubernetes
Java容器技术:Docker与Kubernetes
14 0
|
11天前
|
存储 Java 索引
【亮剑】Java中的并发容器ConcurrentHashMap,它在JDK1.5中引入,用于替换HashTable和SynchronizedMap
【4月更文挑战第30天】本文介绍了Java中的并发容器ConcurrentHashMap,它在JDK1.5中引入,用于替换HashTable和SynchronizedMap。文章展示了创建、添加、获取、删除和遍历元素的基本用法。ConcurrentHashMap的内部实现基于分段锁,每个段是一个独立的Hash表,通过分段锁实现并发控制。每个段内部采用数组+链表/红黑树的数据结构,当冲突过多时转为红黑树优化查询。此外,它有扩容机制,当元素超过阈值时,会逐段扩容并翻倍Segment数量,以保持高性能的并发访问。
|
18天前
|
存储 算法 Java
盘点Java集合(容器)概览,Collection和Map在开发中谁用的最多?
盘点Java集合(容器)概览,Collection和Map在开发中谁用的最多?
30 0
|
25天前
|
存储 安全 Java
Java中的容器,线程安全和线程不安全
Java中的容器,线程安全和线程不安全
17 1
|
26天前
|
存储 Java 开发者
使用Docker容器化Java后台应用
【4月更文挑战第16天】本文介绍了如何使用Docker容器化Java后台应用。Docker作为开源应用容器引擎,提供一致运行环境,简化部署,增强可移植性。文章详细阐述了Docker的优势,包括环境一致性、隔离性、可移植性和资源效率。步骤包括安装Docker、创建Dockerfile、构建镜像、运行容器及管理容器。进阶部分涉及多阶段构建、数据持久化和网络配置,强调了Docker对现代Java开发的重要性。
|
29天前
|
安全 算法 Java
安全无忧:Java并发集合容器的应用与实践
安全无忧:Java并发集合容器的应用与实践
30 0
安全无忧:Java并发集合容器的应用与实践
|
1月前
|
存储 安全 算法
java多线程之并发容器集合
java多线程之并发容器集合
|
1月前
|
Java 持续交付 开发者
使用 Docker 容器化 Java Web 应用:提高开发和部署效率
【4月更文挑战第4天】Docker 作为轻量级容器技术,提升了 Java Web 应用的开发和部署效率。它提供类似生产环境的本地开发体验,减少环境配置时间,保证应用隔离性与稳定性。Docker 改善了部署流程,实现跨环境的无缝迁移,支持自动化构建、部署和扩展,并促进持续集成和持续部署,助力企业实现更高效、可靠的软件生命周期管理。
|
2月前
|
Java 容器
Java常用组件、容器与布局
Java常用组件、容器与布局
22 0