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

目录
相关文章
|
15天前
|
Java 虚拟化 容器
(Java)Java里JFrame窗体的基本操作(容器布局篇-1)
容器 容器,我的理解是可以包容其他东西的玩意。它可以是一个盒子,可以是一个虚拟化的物品,可只要能包裹住其他存在质体的东西,那么都可以称作是容器。例如:JPanel组件和JScollPane组件两者都是容器也是组件。 既然有容器,那么容器中的布局就必不可少了。不然不规矩的摆放物品,人类看不习惯,我也看不习惯 ???? 本篇内容,将说明java JFrame窗体里容器中几类布局。 说明:所有在JFrame窗体里的容器布局都会使用setLayout()方法,采用的布局参数都将放进这个方法里 绝对布局 调用窗体容器
39 1
|
2月前
|
存储 缓存 Java
Java数组全解析:一维、多维与内存模型
本文深入解析Java数组的内存布局与操作技巧,涵盖一维及多维数组的声明、初始化、内存模型,以及数组常见陷阱和性能优化。通过图文结合的方式帮助开发者彻底理解数组本质,并提供Arrays工具类的实用方法与面试高频问题解析,助你掌握数组核心知识,避免常见错误。
|
1月前
|
Java
Java 数组学习笔记
本文整理Java数组常用操作:遍历、求和、查找、最值及二维数组行求和等典型练习,涵盖静态初始化、元素翻倍、去极值求平均等实例,帮助掌握数组基础与应用。
|
3月前
|
存储 Java 索引
java 数组
在 Java 中,数组是一种数据结构,用于存储多个相同类型的数据元素。数组的大小一旦创建后就不能改变,因此它是固定长度的。Java 数组是一种 对象,即使它存储的值是基本类型(如 int、double 等),它也是一个对象引用。
88 0
|
4月前
|
存储 缓存 安全
Java 集合容器常见面试题及详细解析
本文全面解析Java集合框架,涵盖基础概念、常见接口与类的特点及区别、底层数据结构、线程安全等内容。通过实例讲解List(如ArrayList、LinkedList)、Set(如HashSet、TreeSet)、Map(如HashMap、TreeMap)等核心组件,帮助读者深入理解集合容器的使用场景与性能优化。适合准备面试或提升开发技能的开发者阅读。
83 0
|
4月前
|
缓存 Java API
Java 集合容器实操技巧与案例详解
本教程基于Java 8+新特性和现代开发实践,深入讲解Java集合容器的实操技巧。通过具体场景演示Stream API数据处理、ConcurrentHashMap并发控制、LinkedHashMap实现LRU缓存、TreeSet自定义排序等高级特性。同时涵盖computeIfAbsent优化操作、EnumMap专用集合使用、集合统计与运算(交集、并集、差集)等内容。代码示例丰富,助力掌握高效编程方法。[点击获取完整代码](https://pan.quark.cn/s/14fcf913bae6)。
72 0
|
5月前
|
存储 人工智能 Java
打乱数组内容引发的问题( Java)
本文介绍了两种实现数组随机打乱的方法,并深入探讨了Java中原始数据类型与对象类型的差异。方法一通过自定义随机数交换数组元素位置,方法二借助`Collections.shuffle()`函数完成数组打乱。同时,文章详细解析了`int`和`Integer`的区别,包括声明方式、内存占用、初始化以及对象特性等,并讲解了自动装箱与拆箱的功能,帮助读者更好地理解Java的基础知识。
|
6月前
|
存储 Java 数据挖掘
Java 中数组的多种定义方式
本文深入解析了Java中数组的多种定义方式,涵盖基础的`new`关键字创建、直接初始化、动态初始化,到多维数组、`Arrays.fill()`方法以及集合类转换为数组等高级用法。通过理论与实践结合的方式,探讨了每种定义方法的适用场景、优缺点及其背后的原理,帮助开发者掌握高效、灵活的数组操作技巧,从而编写更优质的Java代码。
258 0
|
2月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
554 108

热门文章

最新文章