2022-11-16:给你一个数组 nums,我们可以将它按一个非负整数 k 进行轮调,
例如,数组为 nums = [2,4,1,3,0],
我们按 k = 2 进行轮调后,它将变成 [1,3,0,2,4]。
这将记为 3 分,
因为 1 > 0 [不计分]、3 > 1 [不计分]、0 <= 2 [计 1 分]、
2 <= 3 [计 1 分],4 <= 4 [计 1 分]。
在所有可能的轮调中,返回我们所能得到的最高分数对应的轮调下标 k 。
如果有多个答案,返回满足条件的最小的下标 k 。
输入:nums = [2,3,1,4,0]。
输出:3。

答案2022-11-16:

力扣798。差分数组。
时间复杂度:O(N)。
空间复杂度:O(N)。
代码用rust编写。代码如下:

use std::iter::repeat;

impl Solution {
pub fn best_rotation(nums: Vec<i32>) -> i32 {
let n = nums.len() as i32;
// cnt : 差分数组
// cnt最后进行前缀和的加工!
// 加工完了的cnt[0] : 整体向右移动0的距离, 一共能得多少分
// 加工完了的cnt[i] : 整体向右移动i的距离, 一共能得多少分
let mut cnt: Vec<i32> = repeat(0).take((n + 1) as usize).collect();
for i in 0..n {
// 遍历每个数!
// 看看每个数,对差分数组哪些范围,会产生影响!
if nums[i as usize] < n {
if i <= nums[i as usize] {
Solution::add(&mut cnt, nums[i as usize] - i, n - i - 1);
} else {
Solution::add(&mut cnt, 0, n - i - 1);
Solution::add(&mut cnt, n - i + nums[i as usize], n - 1);
}
}
}
for i in 1..=n {
cnt[i as usize] += cnt[(i - 1) as usize];
}
// 最大得分是啥!已经求出来了
let mut max = cnt[0];
let mut ans = 0;
let mut i = n - 1;
while i >= 1 {
// 整体移动的i 0 n-1 n-2 n-3 1
// k 0 1 2 3 n-1
if cnt[i as usize] > max {
max = cnt[i as usize];
ans = i;
}
i -= 1;
}
return if ans == 0 { 0 } else { n - ans };
}
fn add(cnt: &mut Vec<i32>, l: i32, r: i32) {
cnt[l as usize] += 1;
cnt[(r + 1) as usize] -= 1;
}
} fn main() {
let nums = vec![2, 3, 1, 4, 0];
let ans = Solution::best_rotation(nums);
println!("ans = {:?}", ans);
} struct Solution {}

执行结果如下:


左神java代码

2022-11-16:给你一个数组 nums,我们可以将它按一个非负整数 k 进行轮调, 例如,数组为 nums = [2,4,1,3,0], 我们按 k = 2 进行轮调后,它将变成 [1,3,0,的更多相关文章

  1. 信1705-2 软工作业最大重复词查询思路: (1)将文章(一个字符串存储)按空格进行拆分(split)后,存储到一个字符串(单词)数组中。 (2)定义一个Map,key是字符串类型,保存单词;value是数字类型,保存该单词出现的次数。 (3)遍历(1)中得到的字符串数组,对于每一个单词,考察Map的key中是否出现过该单词,如果没出现过,map中增加一个元素,key为该单词,value为1(

    通过学习学会了文本的访问,了解一点哈希表用途.经过网上查找做成了下面查询文章重复词的JAVA程序. 1 思 思路: (1)将文章(一个字符串存储)按空格进行拆分(split)后,存储到一个字符串(单词 ...

  2. C#中缓存的使用 ajax请求基于restFul的WebApi(post、get、delete、put) 让 .NET 更方便的导入导出 Excel .net core api +swagger(一个简单的入门demo 使用codefirst+mysql) C# 位运算详解 c# 交错数组 c# 数组协变 C# 添加Excel表单控件(Form Controls) C#串口通信程序

    C#中缓存的使用   缓存的概念及优缺点在这里就不多做介绍,主要介绍一下使用的方法. 1.在ASP.NET中页面缓存的使用方法简单,只需要在aspx页的顶部加上一句声明即可:  <%@ Outp ...

  3. 2021.11.16 P2375 [NOI2014] 动物园(EXKMP+差分)

    2021.11.16 P2375 [NOI2014] 动物园(EXKMP+差分) https://www.luogu.com.cn/problem/P2375 题意: PS:这道神题的背景让人疑惑,重 ...

  4. 将一个JSON数组[{},{},{}]按一定规则合并到另一个JSON数组[{},{},{}]

    // 将一个JSON数组[{},{},{}]按一定规则合并到另一个JSON数组[{},{},{}] // Object.assign方法的第一个参数是目标对象,后面的参数都是源对象. var list ...

  5. Beta周第7次Scrum会议(11/16)【王者荣耀交流协会】

    一.小组信息 队名:王者荣耀交流协会 小组成员 队长:高远博 成员:王超,袁玥,任思佳,王磊,王玉玲,冉华 小组照片 二.开会信息 时间:2017/11/16 17:03~17:17,总计14min. ...

  6. javascript中把一个数组的内容全部赋值给另外一个数组

    如:var a = [1,2,3,4];var b= [];b = a;这个不是把值赋值过去而是b作为a的引用,b改变的是a如何b指向的是一个新数组,a把元素值全部赋值过去? 1.普通数组可以使用   ...

  7. 每日分享!~ JavaScript(js数组如何在指定的位置插入一个元素)

      这个想法是在一个面试题中看到的: 题目是这样的: // 一个数组,在指定的index 位置插入一个元素,返回一个新的数组,不改变原来的数组 <script> function inse ...

  8. php--------删除数组的第一个元素和最后一个元素

    对于一个php数组,该如何删除该数组的第一个元素或者最后一个元素呢?其实这两个过程都可以通过php自带的函数 array_pop 和 array_shift 来完成,下面就具体介绍一下如何来操作. ( ...

  9. php中删除数组的第一个元素和最后一个元素的函数

    对于一个php数组,该如何删除该数组的第一个元素或者最后一个元素呢?其实这两个过程都可以通过php自带的函数 array_pop 和 array_shift 来完成,下面就具体介绍一下如何来操作. ( ...

  10. 创建一个长度是5的数组,并填充随机数。使用for循环或者while循环,对这个数组实现反转效果

    package day01; import java.util.Random; /** * 首先创建一个长度是5的数组,并填充随机数.使用for循环或者while循环,对这个数组实现反转效果 * @a ...

随机推荐

  1. vue3 ThreeJS 引入obj模型过暗的问题

    当我单纯地用MTLLoader引入材质, OBJLoader引入模型并添加到场景中时, 发现模型非常得暗. 需要将环境光的强度设置到3.5左右看起来才比较正常. 但正常情况下环境光的值不应该超出1.  ...

  2. Unity2017-HTC项目串流Pico摇杆移动功能

    最近公司PC项目需要串流到Piconec3上运行,HTC手柄是圆盘键按下移动还可以,但是Piconeo3是摇杆,按下移动的话显得不科学,所以写了一套基于圆盘键,使用摇杆移动的方法 第一步:编写摇杆左右 ...

  3. Android笔记--通过MediaStore查询图片

    相关描述 已经完成发送彩信功能之后,就来继续向前走一步,来到MediaStore查询图片界面啦! 具体步骤实现 1.简简单单地一个界面 <?xml version="1.0" ...

  4. 关于如何编写好金融科技客户端SDK的思考

    引言 回想起来,我在目前的团队(金融科技领域)待了有很长一段时间了,一直在做SDK研发,平时工作中经历过大刀阔斧一蹴而就的喜悦,也经历过被一个问题按在地上摩擦,无奈"废寝忘食"的不 ...

  5. 【手搓模型】亲手实现 Vision Transformer

    前言 博客主页:睡晚不猿序程 首发时间:2023.3.17,首发于博客园 最近更新时间:2023.3.17 本文由 睡晚不猿序程 原创 作者是蒻蒟本蒟,如果文章里有任何错误或者表述不清,请 tt 我, ...

  6. Android和adb命令

    一.名词解释 1.SDK:是软件开发工具包 2.activity(活动):驱使软件运行的一段程序,软件系统和用户进行交互的界面叫一个活动 二.adb命令 1.查看连接的设备:adb devices 2 ...

  7. 记一次 .NET 某手术室行为信息系统 内存泄露分析

    一:背景 1. 讲故事 昨天有位朋友找到我,说他的程序内存存在泄露导致系统特别卡,大地址也开了,让我帮忙看一下怎么回事?今天上午看了下dump,感觉挺有意思,在我的分析之旅中此类问题也蛮少见,算是完善 ...

  8. pypiwin32里面常用包

    PACKAGE CONTENTS _win32sysloader _winxptheme mmapfile odbc perfmon servicemanager timer win2kras win ...

  9. dev-tools

    Maven配置依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId& ...

  10. internal java compiler error

    1.导入Maven项目运行报错:  解决方法:找到File->Settings  修改配置 再次运行就可以了.