牛客网刷题——斩获offer

简介: 牛客网刷题——斩获offer

@TOC

一、 随机数组

通过对数器生成一个随机长度,随机大小的数组

public static int[] randomArray(int maxLen,int maxValue) {
        int Len = (int)(Math.random() * maxLen);
        int[] arr = new int[Len];
        if(Len > 0) {
            arr[0] = (int)(Math.random() * maxValue);
            for (int i = 1; i < Len; i++) {
                do {
                    arr[i] = (int)(Math.random() * maxValue);
                } while(arr[i] == arr[i-1]);
            }
        }
        return arr;
    }```
    

二、 局部最小值

定义局部最小的概念。arr长度为1时,arr[0]是局部最小。arr的长度为N(N>1)时,如果arr[0] < arr[1],那么arr[0]是局部最小;
如果arr[N-1]<arr[N-2],那么arr[N-1]是局部最小;如果0<i<N-1,既有arr[i] < arr[i-1],又有arr[i] < arr[i + 1],那么arr[i]是局部最小。给定无序数组arr,已知arr中任意两个相邻的数都不相等,只需要返回arr中任意一个局部最小出现的位置即可,如果不存在这个位置就输出-1。
在这里插入图片描述
在这里插入图片描述

import java.util.*;
public class Main{
    public static int oneMinIndex(int[] arr) {
        if(arr == null || arr.length == 0) {
            return -1;
        }
        if(arr.length == 1) {
            return 0;
        }

        if(arr[0] < arr[1]) {
            return 0;
        }
        int N = arr.length;
        if(arr[N-1] < arr[N-2]) {
            return N-1;
        }
        int L = 0;
        int R = N - 1;
        int ans = -1;
        while(L <= R) {
            int mid = (L + R) / 2;
            if(arr[mid] < arr[mid-1] && arr[mid] < arr[mid+1]) {
                ans = mid;
                break;
            }
            if(arr[mid] > arr[mid-1]) {
                R = mid - 1;
                continue;
            }
            if(arr[mid] > arr[mid+1]) {
                L = mid + 1;
                continue;
            }
        }
        return ans;
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] arr = new int[n];
        while(scanner.hasNextInt())
        {
            for(int i = 0;i < n;i++) {
            arr[i] = scanner.nextInt();
        }
        }
        System.out.println(oneMinIndex(arr));
    }
}

四、 三个数的最大乘积

给定一个长度为 nn 的无序数组 AA ,包含正数、负数和 0 ,请从中找出 3 个数,使得乘积最大,返回这个乘积。
在这里插入图片描述
我们先对数组进行排序,然后就上面两个情况的数的大小,因为数组是升序的,从小到大,最大的两个负数乘积就在数组的最前面,最大的三个正数就在数组的最后面,比较两个数即可。

  1. 没有正数,当然负数越小乘积越大,即排序后数组的最后三个数,零大于负数
  2. 没有负数,数越大乘积越大,即排序后数组的最后三个数
  3. 一个负数,排序后的最后三个数乘积最大
  4. 一个正数,即开头的第一个情况。
public long solve (int[] A) {
        Arrays.sort(A);
        int n = A.length - 1;
        return Math.max((long)A[n]*A[n-1]*A[n-2],(long)A[0]*A[1]*A[n]);
    }

三、 阶乘累加

计算1!+2!+3!……+n!
方法1:暴力求解

public static long f1(int n) {
        long ans = 0;
        for (int i = 1; i <= n; i++) {
            ans += factorial(i);
        }
        return ans;
    }
    public static long factorial(int n){
        long ans = 1;
        for (int i = 1; i <= n; i++) {
            ans *= i;
        }
        return ans;
    }
    public static void main(String[] args) {
        //求阶乘之和
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        System.out.println(f1(n));
    }

方法二:迭代法

public static long f2(int n) {
        long ans = 0;
        long ret = 1;
        for (int i = 1; i <= n; i++) {
            ret *= i;
            ans += ret;
        }
        return ans;
    }
    public static void main(String[] args) {
        //求阶乘之和
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        System.out.println(f2(n));
    }
目录
相关文章
|
NoSQL MongoDB 数据库
MongoDB 解析:灵活文档数据库与 Docker Compose 部署
`MongoDB` 是一款开源、高性能的 `NoSQL` 数据库,以其无模式的文档存储格式(BSON)而著称,广泛应用于众多开源项目,包括但不限于 Yapi 等。它在大规模数据存储和实时数据处理方面表现出色,因此备受青睐。在本文中,我们将深入探讨 `MongoDB` 的特性,并详细阐述如何使用 Docker Compose 轻松部署 `MongoDB` 数据库,为你提供全方位的指导。
556 1
MongoDB 解析:灵活文档数据库与 Docker Compose 部署
|
10月前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
213 59
|
7月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
415 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
10月前
|
边缘计算 自动驾驶 物联网
探索云计算的边缘计算:定义、优势及应用前景
探索云计算的边缘计算:定义、优势及应用前景
|
11月前
|
数据可视化 数据挖掘 Docker
Docker Desktop 安装 ClickHouse 超级简单教程
Docker Desktop 安装 ClickHouse 超级简单教程
373 1
|
10月前
|
关系型数据库 Linux 分布式数据库
rpm安装polarDB-PG的实践
安装PolarDB for PostgreSQL的实践,需要帮助到有同样需要的小伙伴
582 3
|
安全
导致并发程序出现问题的根本原因是什么?
导致并发程序出现问题的根本原因是多线程之间的竞争条件和共享资源的访问冲突。多线程环境下,多个线程同时访问和修改共享资源时,可能会导致数据不一致、竞态条件、死锁等问题。
395 0
|
移动开发 前端开发 小程序
uniapp内置组件uni.navigateTo跳转后页面空白问题解决
【7月更文挑战第1天】uniapp内置组件uni.navigateTo跳转后页面空白问题解决
480 4
|
算法
计算机网络:封装成帧 & 透明传输 & 差错检测
计算机网络:封装成帧 & 透明传输 & 差错检测
395 0
|
JavaScript
在Vue项目中vue-quill-editor的安装与使用【详细图解+过程+包含图片的缩放拖拽】
文章详细介绍了在Vue项目中安装和使用`vue-quill-editor`的步骤,包括如何通过npm安装、局部挂载、在Vue页面中引入和配置使用。同时,还提供了如何实现图片的缩放和拖拽功能的进阶教程,涉及到安装额外的插件`quill-image-drop-module`和`quill-image-resize-module`,以及对Webpack配置的调整。最后,文章还提供了实际效果展示和一些后续可能的拓展功能,如上传视频和将图片上传到服务器等。
在Vue项目中vue-quill-editor的安装与使用【详细图解+过程+包含图片的缩放拖拽】