2021-11-04:计算右侧小于当前元素的个数。给你`一个整数数组 nums ,按要求返回一个新数组 counts 。数组 counts 有该性质: counts[i] 的值是 nums[i] 右
2021-11-04:计算右侧小于当前元素的个数。给你`一个整数数组 nums ,按要求返回一个新数组 counts 。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。力扣315。
福大大 答案2021-11-04:
具体见代码。
代码用golang编写。代码如下:
package main
import "fmt"
func main() {
arr := []int{5, 2, 6, 1}
ret := countSmaller(arr)
fmt.Println(ret)
}
type Node struct {
value int
index int
}
func NewNode(v, i int) *Node {
res := &Node{}
res.value = v
res.index = i
return res
}
func countSmaller(nums []int) []int {
ans := make([]int, 0)
if len(nums) == 0 {
return ans
}
for i := 0; i < len(nums); i++ {
ans = append(ans, 0)
}
if len(nums) < 2 {
return ans
}
arr := make([]*Node, len(nums))
for i := 0; i < len(arr); i++ {
arr[i] = NewNode(nums[i], i)
}
process(arr, 0, len(arr)-1, ans)
return ans
}
func process(arr []*Node, l int, r int, ans []int) {
if l == r {
return
}
mid := l + ((r - l) >> 1)
process(arr, l, mid, ans)
process(arr, mid+1, r, ans)
merge(arr, l, mid, r, ans)
}
func merge(arr []*Node, l int, m int, r int, ans []int) {
help := make([]*Node, r-l+1)
i := len(help) - 1
p1 := m
p2 := r
for p1 >= l && p2 >= m+1 {
if arr[p1].value > arr[p2].value {
ans[arr[p1].index] = ans[arr[p1].index] + p2 - m
}
if arr[p1].value > arr[p2].value {
help[i] = arr[p1]
i--
p1--
} else {
help[i] = arr[p2]
i--
p2--
}
}
for p1 >= l {
help[i] = arr[p1]
p1--
i--
}
for p2 >= m+1 {
help[i] = arr[p2]
p2--
i--
}
for i := 0; i < len(help); i++ {
arr[l+i] = help[i]
}
}
执行结果如下:

2021-11-04:计算右侧小于当前元素的个数。给你`一个整数数组 nums ,按要求返回一个新数组 counts 。数组 counts 有该性质: counts[i] 的值是 nums[i] 右的更多相关文章
- Leetcode 315.计算右侧小于当前元素的个数
计算右侧小于当前元素的个数 给定一个整数数组 nums,按要求返回一个新数组 counts.数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元 ...
- Java实现 LeetCode 315 计算右侧小于当前元素的个数
315. 计算右侧小于当前元素的个数 给定一个整数数组 nums,按要求返回一个新数组 counts.数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i ...
- leetcode315 计算右侧小于当前元素的个数
1. 采用归并排序计算逆序数组对的方法来计算右侧更小的元素 time O(nlogn): 计算逆序对可以采用两种思路: a. 在左有序数组元素出列时计算右侧比该元素小的数字的数目为 cnt=r-mid ...
- [Leetcode]315.计算右侧小于当前元素的个数 (6种方法)
链接 给定一个整数数组 nums,按要求返回一个新数组 counts.数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量. 示例: 输 ...
- [Swift]LeetCode315. 计算右侧小于当前元素的个数 | Count of Smaller Numbers After Self
You are given an integer array nums and you have to return a new countsarray. The counts array has t ...
- 315 Count of Smaller Numbers After Self 计算右侧小于当前元素的个数
给定一个整型数组 nums,按要求返回一个新的 counts 数组.数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于nums[i] 的元素的数量.例子:给定 nu ...
- 2021.11.04 P1392 取数(多路归并)
2021.11.04 P1392 取数(多路归并) P1392 取数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 在一个n行m列的数阵中,你须在每一行取一个数(共n个数) ...
- u盘安装ubuntu10.04 、11.04 server
10.04 先将 ubuntu server 的 iso 放到优盘上,然后在提示无法找到光驱时,按 alt+f2 打开一个新的 console 窗口,将 iso mount 上,具体操作如下: ls ...
- 2021.11.16 P2375 [NOI2014] 动物园(EXKMP+差分)
2021.11.16 P2375 [NOI2014] 动物园(EXKMP+差分) https://www.luogu.com.cn/problem/P2375 题意: PS:这道神题的背景让人疑惑,重 ...
- 2021.11.10 P5231 [JSOI2012]玄武密码(AC自动机)
2021.11.10 P5231 [JSOI2012]玄武密码(AC自动机) https://www.luogu.com.cn/problem/P5231 题意: 给出字符串S和若干T,求S与每个T的 ...
随机推荐
- 关于Appium执行用例过程中问题处理办法
关于Appium执行用例过程中问题处理办法 1. 运行环境 1.1 windows10 64位系统 1.2 华为荣耀V10 Android 9 1.3 appium-desktop 1 ...
- Scanner进阶使用
Scanner 进阶使用 package com.andy.base.scanner; import java.util.Scanner; public class Demo04 { public s ...
- 每次SSH执行完都会关闭通道,返回目录,如果想一次执行多步操作,需要多条命令才能达到目的时,用;分割操作指令,一并导入执行
每次SSH执行完都会关闭通道,返回目录,如果想一次执行多步操作,需要多条命令才能达到目的时,用:分割操作指令,一并导入执行: 例如: self.execmd='cd ../tmp/log/;pwd;t ...
- 第二章 数据和C
2.1错误和警告 如果输入这个程序的过程中出现错误(error),比如少了一个分号,编译器会给出语法错误消息.即使输入正确,编译器还可能发出这样的警告(warning):"警告------从 ...
- Golang 实现 RTP
在 Coding 之前我们先来简单介绍一下 RTP(Real-time Transport Protocol), 正如它的名字所说,用于互联网的实时传输协议,通过 IP 网络传输音频和视频的网络协议. ...
- 【读书笔记】排列研究-模式避免-续篇Pattern Avoidance
目录 多项式递归Polynomial Recursions P-recursive和c-recursive定义 例子:卡特兰数序列是P-recursive(或者说D-finite) 两个说明\(S_n ...
- vue2升级vue3:vue-i18n国际化异步按需加载
vue2异步加载之前说过,vue3还是之前的方法,只是把 i18n.setLocaleMessage改为i18n.global.setLocaleMessage 但是本文还是详细说一遍: 为什么需要异 ...
- python + BeautifulSoup + selenium 实现爬取中医智库的古籍分类的数据
爬取内容为 该图片下的七个分类, 然后对应的每个种类的书本信息(摘要和目录) 效果为 代码如下 import requests from bs4 import BeautifulSoup import ...
- HashMap和ConcurrentHashMap扩容过程
HashMap 存储结构 HashMap是数组+链表+红黑树(1.8)实现的. (1)Node[] table,即哈希桶数组.Node是内部类,实现了Map.Entry接口,本质是键值对. 下图链表中 ...
- 怎么用ChatGPT写代码,ChatGPT怎么改代码修BUG
ChatGPT 是一个自然语言处理模型,可以模拟人类语言生成文本,可以用于写代码和修复bug.在本文中,我们将介绍如何使用 ChatGPT 写代码和修bug. 怎么用ChatGPT写代码? 虽然 Ch ...