首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

大象起舞:用PostgreSQL解海盗分金问题

海盗信息可以用一个长度为2整型数组来保存,其中第 一项保存海盗编号,第二项保存海盗收益,如果海盗"没命"则金额`null`。...PostgreSQL原生未提供通用数组排序功能(intarray插件中sort函数只能用于非null一位整型数组),要对二维整型数组结构分配策略排序,需要先将数组展开成行记录(row),再用`...(anyarray, int)` 可获得数组长度,最后一个需要贿赂海盗下标是 `(array_length(strategy, 1) + 1) / 2`。...在"数据结构"一节中已经提过,策略数据结构是二维整数数组,前文为了排序,已将数组转成行记录,先需要使用 PostgreSQL 窗口函数 `array_agg` 再将行记录转成数组,同时使用 `array_cat...完整代码 至此,需求中所有功能点都有对应 SQL 方案可解决:迭代5次后,选出数组长度(海盗人数)为5方案即可。

80860
您找到你想要的搜索结果了吗?
是的
没有找到

PostgreSQL - 字符串函数汇总

大小写转换 upper和lower函数,如下: 1 2 select upper('test'); --TEST select lower('TEST'); --test 获取字符串长度 length...函数是返回参数中第一个非null值,在PostgreSQL 10里,它要求参数中至少有一个是非null,如果参数都是null会报错。...array_agg和string_agg函数类似,但会把一个字符串列合并成一个数组对象,同样支持指定合并顺序和去重操作;合并成数组后意味着你可以像数组那样去读取它,需要注意是,数据库数组下标是从1...开始,而不是从0开始: 1 2 3 4 5 select array_agg(distinct ref_no) from cnt_item where updated_on between '2021...常用函数汇总 字符串函数和操作符 PostgreSQL 判断字符串包含几种方法 PostgreSql 聚合函数string_agg与array_agg 警告 本文最后更新于 June 22, 2021

2.6K20

长度最小数组

长度最小数组 给定一个含有n个正整数数组和一个正整数s ,找出该数组中满足其和 ≥ s长度最小连续子数组,并返回其长度。如果不存在符合条件连续子数组,返回0。...实例 输入: s = 7, nums = [2,3,1,2,4,3] 输出: 2 解释: 子数组 [4,3] 是该条件下长度最小连续子数组。...然后继续循环,当sum < s时候尾指针不断右移,因为窗口间值一直小于给定s,只有尾指针右移扩大窗口才有可能使窗口间和大于等于s,当窗口间值和大于s时,那么就使首指针右移用以减小窗口数量...,只有不断减少窗口数量才能获得长度最小连续子数组,当尾指针达到边界条件即尾指针超过了nums数组长度,那么尾指针不再右移,此时将首指针不断右移,直到首指针长度与nums数组长度相等,结束循环,...在最后判断target是否仍然等于无穷大,如果仍然是等于无穷大则认为没有找到合适数组长度并返回0,否则就返回target。

1.8K10

数组长度计算_c语言计算数组长度函数

:strlen,求字符串有效长度 方法:strlen(字符数组名) //结果为字符数组有效字符长度,不包含末尾’ /0′ 注意: 当数组作为函数參数传递时,数组名代表数组首址,...而非数组内容,故无法使用sizeof和strlen; 所以,在传址时,应提供2个參数:1个是数组名,代表数组首地址;1个是数组元素个数,以便确定传递次数。...,数组名代表数组首址,即指针,而非数组内容。...假设传递整个数组,会导致栈溢出。 所以在主函数中使用sizeof计算出是准确数组长度。...而在调用函数中,因为传递数组不再是数组本身,而是其地址,所以用sizeof计算出,实际上是数组地址长度,这时sizeof(array),实际上是sizeof(int)。

2.8K20

数组——209.长度最小数组

1 题目描述 长度最小数组 给定一个含有 n 个正整数数组和一个正整数 target 。...找出该数组中满足其和 ≥ target 长度最小 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件数组,返回 0 。...2 题目示例 示例 1: 输入:target = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下长度最小数组。...示例 2: 输入:target = 4, nums = [1,4,4] 输出:1 示例 3: 输入:target = 11, nums = [1,1,1,1,1,1,1,1] 输出:0...解题关键在于 窗口起始位置如何移动 滑动窗口精妙之处在于根据当前子序列和大小情况,不断调节子序列起始位置。

1.7K70

java数组定义长度_JAVA数组定义

大家好,又见面了,我是你们朋友全栈君。...JAVA一维数组 一,注意 不可添加数组元素 不可改变数组长度 一个数组说有元素必须数据类型相同 二,创建方法三种 1直接添加元素 类型[] 数组名 = {元素,元素,元素,……}; int[] arr...={1,2,3,4}; 2先定义数组长度再添加元素 类型[] 数组名 = new 类型[长度]; int[] arr=[2]; arr[0]=1; arr[1]=2; 与此方法类似的 int[] arr...; arr=new int[100]; 3不定义数组长度直接添加元素 类型[] 数组名 = new 类型[]{元素,元素,……}; int[] arr=new int[]{1,2,3,4}; 括弧)js...; arr[0][1]=1; arr[1][1]=1; 3比较麻烦方法,只定义一维数组长度,无二维数组长度 int[] arr=new int[2][]; 写入下一个数组 arr[0]=new int

4.1K20

面试算法:在未知长度排序数组中进行快速查找

假设A是一个排好序数组,但是它长度,我们无法得知。...这道题跟我们以前处理查找问题不同之处在于,数组A长度无法确定。如果数组A长度确定的话,那么问题就退化为一个在排序数组中进行查找问题,此时我们依靠二分查找法就能快速定位数组A是否包含给定元素。...在不确定长度排序数组中进行查找时,我们可以这么做。...,我们可以确定数组末尾一定在当前计算中点之前,因此调整二分查找区间末尾后,再次进行查找即可,注意代码实现中,从没有考虑数组长度。...上面代码运行时间复杂度是lg(n),其中n是数组长度

57720

在未知长度超大数组中线性时间内查找第k大元素

给定一个长度为n数组,n是一个很大值,而且事先不知道n大小,给定一个确定数值k,要求设计一个找出数组中第k大元素,要求算法需要空间不能超过O(k)。...这个题目的处理有两个麻烦点,第一是它长度n不能提前知道,第二点在于题目对算法空间有限定。...我们可以申请一个2k长度内存,每次从数组中读入元素时就存入2k内存,当把内存填满后,用上面方法找到第k大元素,然后保留前k个元素,新读入元素填充后k个单位内存,每次2k内存填满后就使用上面方法查找第...由于每次在2k个元素中查找第k大元素所需时间复杂度为O(2k),总查找次数是 n/k,于是总时间复杂度是O(2k)* n\k = O(n)。...我们先调用前面实现逻辑查找给定元素,然后把数组排序后,再取出第k大元素,如果两次获得元素一样,那表明我们代码逻辑和实现是正确,上面代码运行后结果如下: ?

90220

二维数组查找

题目:在一个二维数组中,每一行都按照从左到右递增顺序排序,每一列都按照从上到下递增顺序排序。请完成一个函数,输入这样一个二维数组和一个整数,判断数组中是否含有该整数。       ...下面我们以在题目中给出数组查找数字7为例来一步步分析查找过程。        我们发现如下规律:首先选取数组中右上角数字。...如果该数字等于要查找数字,查找过程结束;如果该数字大于要查找数字,剔除这个数字所在列;如果该 数字小于要查找数字,剔除这个数字所在行。...也就是说如果要查找数字不在数组右上角,则每一次都在数组查找范围中剔除一行或者一列,这样每一步都 可以缩小查找范围,直到找到要查找数字,或者查找范围为空。      ...以左上角为例,最初数字1位于初始数组左上角,由于1小于7,那么7应该位于1右边或者下边。此时我们既不 能从查找范围内剔除1所在行,也不能剔除1所在列,这样我们就无法缩小查找范围。

1.3K50
领券