栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

假期算法打卡7.2

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

假期算法打卡7.2

前言

提示:4道练习题大概内容:


一、三个数的最大乘积?
  • 给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。

    示例 1:

    输入:nums = [1,2,3]
    输出:6
    示例 2:

    输入:nums = [1,2,3,4]
    输出:24
    示例 3:

    输入:nums = [-1,-2,-3]
    输出:-6
     

    提示:

    3 <= nums.length <= 104
    -1000 <= nums[i] <= 1000
    链接:https://leetcode.cn/problems/maximum-product-of-three-numbers

    class·Solution·{
    
    ····public·int·maximumProduct(int[]·nums)·{
    
    ········int·n·=·nums.length;
    
    ········Arrays.sort(nums);
    
    ········return·Math.max(nums[0]*nums[1]*nums[n·-·1],·nums[n·-·1]*nums[n·-·2]*nums[n·-·3]);
    
    ····}
    
    }

二、有多少小于当前数字的数字
  • 给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。

    换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。

    以数组形式返回答案。

    示例 1:

    输入:nums = [8,1,2,2,3]
    输出:[4,0,1,1,3]
    解释: 
    对于 nums[0]=8 存在四个比它小的数字:(1,2,2 和 3)。 
    对于 nums[1]=1 不存在比它小的数字。
    对于 nums[2]=2 存在一个比它小的数字:(1)。 
    对于 nums[3]=2 存在一个比它小的数字:(1)。 
    对于 nums[4]=3 存在三个比它小的数字:(1,2 和 2)。
    

    示例 2:

    输入:nums = [6,5,4,8]
    输出:[2,1,0,3]
    

    示例 3:

    输入:nums = [7,7,7,7]
    输出:[0,0,0,0]
    

    提示:

  • 2 <= nums.length <= 500
  • 0 <= nums[i] <= 100
class·Solution·{

····public·int[]·smallerNumbersThanCurrent(int[]·nums)·{

········int[]·arrays·=·new·int[101];

→   →   for·(int·num·:·nums)

→   →   →   arrays[num]·+=·1;

→   →   for·(int·i·=·1;·i·<·arrays.length;·i++)

→   →   →   arrays[i]·+=·arrays[i·-·1];

→   →   for·(int·i·=·0;·i·<·nums.length;·i++)

→   →   →   nums[i]·=·nums[i]·!=·0·?·arrays[nums[i]·-·1]·:·0;

→   →   return·nums;

····}

}
三、使数组唯一的最小增量

给你一个整数数组 nums 。每次 move 操作将会选择任意一个满足 0 <= i < nums.length 的下标 i,并将 nums[i] 递增 1。

返回使 nums 中的每个值都变成唯一的所需要的最少操作次数。

示例 1:

输入:nums = [1,2,2]
输出:1
解释:经过一次 move 操作,数组将变为 [1, 2, 3]。

示例 2:

输入:nums = [3,2,1,2,1,7]
输出:6
解释:经过 6 次 move 操作,数组将变为 [3, 4, 1, 2, 5, 7]。
可以看出 5 次或 5 次以下的 move 操作是不能让数组的每个值唯一的

提示:

  • 1 <= nums.length <= 105
  • 0 <= nums[i] <= 105

class·Solution·{

····public·int·minIncrementForUnique(int[]·A)·{

········//·先排序

········Arrays.sort(A);

········int·move·=·0;

········//·遍历数组,若当前元素小于等于它的前一个元素,则将其变为前一个数+1

········for·(int·i·=·1;·i·<·A.length;·i++)·{

············if·(A[i]·<=·A[i·-·1])·{

················int·pre·=·A[i];

················A[i]·=·A[i·-·1]·+·1;

················move·+=·A[i]·-·pre;

············}

········}

········return·move;

····}

}
四、Rising Sand B. 升沙 每次测试的时间限制 1 秒 每次测试的内存限制 为 256 MB 输入 标准输入 输出 标准输出

有$$$n$$$$$$$$$$$$$i$$$$-th的沙堆有$$$a_i$$$$$沙块。如果 $$$i$1 <我< n$$$$ 和 $$$a_i > a_{i-1} + a_{i+1}$$$$,则 $$$$$-th 堆称为太高。也就是说,如果一堆沙子的沙子比两个邻居的总和还要多,那么它就太高了。(请注意,数组两端的堆积不能太高。

您将获得一个整数 $$$k$$$。一项操作包括挑选$ $ $ $k $ $ $连续的沙堆,并向所有沙子添加一个单位的沙子。正式地,选择 $$$1 leq l,r leq n$$$$,使得 $$$r-l+1=k$$$。。然后,对于所有 $$$l leq i leq r$$$,更新 $$$a_i gets a_i+1$$$。。

在一些(可能为零)操作后,同时可能太高的最大桩数是多少?

输入

输入由多个测试用例组成。第一行包含一个整数 $$$t$$$ ($$$1 leq t leq 1000$$$)— 测试用例的数量。测试用例的描述如下。

每个测试用例的第一行包含两个整数 $$$n$$$ 和 $$$k$$$ ($$3 leq n leq 2 cdot 10^5$$$; $$$1 leq k leq n$$$) — 分别是沙堆的数量和操作的大小。

每个测试用例的第二行包含 $$$n$$$ 整数 $$$a_1、a_2、ldots a_n$$$($$1 le a_i le 10^9$$$)— 堆的大小。

可以保证所有测试用例的 $$$n$$$ 总和不超过 $$$2 cdot 10^5$$$。。

输出

对于每个测试用例,输出一个整数 — 在一些(可能为零)操作后同时太高的最大桩数。

例 输入 复制
3
5 2
2 9 2 4 1
4 4
1 3 2 1
3 1
1 3 1
输出 复制
2
0
1
注意

在第一个测试用例中,我们可以执行以下三个操作:

  • 将一个单位的沙子添加到堆中 $$$1$$$ 和 $$$2$$$: $$$[color{red}{3}, color{red}{10}, 2, 4, 1]$$$.
  • 将一个单位的沙子添加到堆中 $$$4$$$ 和 $$$$$$ $ $ $ $ $ $$[3, 10, 2, color{red}{5}, color{red}{2}]$$$..
  • 将一个单位的沙子添加到堆中 $$$3$$$ 和 $$$$$$ $ $ $ $ $ $$[3, 10, color{red}{3}, color{red}{6}, 2]$$$..
现在堆积的 $$$2$$$ 和 $$$4$$$ 太高了,所以在这种情况下,答案是 $$$2$$$。可以证明,不可能把超过$$2$$$的桩堆得太高。

在第二个测试用例中,任何操作都会将所有桩增加 $$$1$$$ 单位,因此太高桩的数量将始终为 $$$0$$$$。。

在第三个测试用例中,我们可以将任何桩增加 $$$1$$$ 单位的沙子。可以看出,过高桩的最大数量是$$$1$$$

import java.util.*;
public class Main{
    public static void main(String[] args){
        // System.out.println("hello world");
        Scanner scanner = new Scanner(System.in);
        int t=scanner.nextInt();
        while(t--!=0){
            int n=scanner.nextInt();
            int k=scanner.nextInt();
            int[] a=new int[n];
            for(int i=0;ia[i-1]+a[i+1])ans++;
            }
            System.out.println(ans);
        }
    }
}


 


 

 

 

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1002756.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号