叫做……概括一个数组?

def summary_ranges(nums)
    summary = [];

    if nums.size == 0
        return summary
    end

    if nums.size == 1
        return summary << nums[0].to_s
    end

    head = nums[0]
    nums.each_index do |i|
        next if i == 0
        if nums[i] == nums.last && nums[i] != nums[i - 1] + 1 && head == nums[i - 1]
            summary << nums[i - 1].to_s
            summary << nums[i].to_s
        elsif nums[i] == nums.last && nums[i] != nums[i - 1] + 1 && head != nums[i - 1]
            summary << "#{head}->#{nums[i - 1]}"
            summary << nums[i].to_s
        elsif nums[i] == nums.last && nums[i] == nums[i - 1] + 1
            summary << "#{head}->#{nums[i]}"
        elsif nums[i] != nums[i - 1] + 1 && head == nums[i - 1]
            summary << nums[i - 1].to_s
            head = nums[i]
        elsif nums[i] != nums[i - 1] + 1 && head != nums[i - 1]
            summary << "#{head}->#{nums[i - 1]}"
            head = nums[i]
        end

    end
    summary
end
vector<string> summaryRanges(vector<int>& nums) {
    size_t len = nums.size();
    vector<string> summary;

    if (len == 0){
        return summary;
    }

    if (len == 1){
        summary.push_back(to_string(nums[0]));
        return summary;
    }

    auto begin = nums.front();
    for (size_t i = 1; i < len; ++i){
        if (nums[i] == nums.back() && nums[i] != nums[i - 1] + 1 && begin == nums[i - 1]){
            summary.push_back(to_string(nums[i - 1]));
            summary.push_back(to_string(nums[i]));
        }

        else if (nums[i] == nums.back() && nums[i] != nums[i - 1] + 1 && begin != nums[i - 1]){
            summary.push_back(to_string(begin) + "->" + to_string(nums[i - 1]));
            summary.push_back(to_string(nums[i]));
        }
        else if (nums[i] == nums.back() && nums[i] == (nums[i - 1] + 1)){
            summary.push_back(to_string(begin) + "->" + to_string(nums[i]));
        }
        else if (nums[i] != nums[i - 1] + 1 && begin == nums[i - 1]){
            summary.push_back(to_string(nums[i - 1]));
            begin = nums[i];
        }
        else if (nums[i] != nums[i - 1] + 1 && begin != nums[i - 1]){
            summary.push_back(to_string(begin) + "->" + to_string(nums[i - 1]));
            begin = nums[i];
        }
    }
    return summary;
}
时间: 2025-01-10 09:50:31

叫做……概括一个数组?的相关文章

java实现求一个数组里最大值和最小值之前缺省的数的算法

问题描述: 求一个数组里最大值和最小值之间缺省的数,例如 int arrDemo = {1, 3, 7};  那么就要输出最小值1和最大值7之间缺少的数字2,4,5,6 代码如下,有更好的思路欢迎大家在评论区留言讨论 1 package test; 2 3 public class Test { 4 5 static int[] array = { 6 -10,0,3,3,9 7 }; 8 9 private static void printEmptyItems(int[] array) {

如何在linux Shell脚本里面把一个数组传递到awk内部进行处理

前段时间和几位同事讨论过一个问题:Shell脚本里面怎样把一个数组传递到awk内部进行处理? 当时没有找到方法.前两天在QQ群里讨论awk的时候,无意间又聊起这个话题.机缘巧合之下找到一个思路,特此分享. 测试环境: [root]# head -1 /etc/redhat-release Red Hat Enterprise Linux Server release 6.5 (Santiago) [root]# awk --version | head -1 GNU Awk 3.1.7 众所周知

程序员面试100题之十:快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值(转)

能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解. 假如有如下的两个数组,如图所示: 5,6,1,4,7,9,8 给定Sum= 10 1,5,6,7,8,9 给定Sum= 10 分析与解法 这个题目不是很难,也很容易理解.但是要得出高效率的解法,还是需要一番思考的. 解法一 一个直接的解法就是穷举:从数组中任意取出两个数字,计算两者之和是否为给定的数字. 显然其时间复杂度为N(N-1)/2即O(N^2).这个算法很简

js实现随机选取[10,100)中的10个整数,存入一个数组,并排序。 另考虑(10,100]和[10,100]两种情况。

1.js实现随机选取[10,100)中的10个整数,存入一个数组,并排序. 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 </head> 7 <body> 8 <script type="text/java

查找一个数组中超过一半的元素

程序1.0 思想:现将数组排序,再找出元素 void Arraysort(int *a, int length)//冒泡O(n^2) { for (size_t i = 0; i < length; i++) { for (size_t j = 1; j <length - 1 - i; j++) { if (a[j]>a[j + 1]) swap(a[j], a[j + 1]); } } } int MorethanHalfNumber(int *a, int length) { Ar

delphi 判断一个数组的长度用 Length 还是 SizeOf ?

判断一个数组的长度用 Length 还是 SizeOf ?最近发现一些代码, 甚至有一些专家代码, 在遍历数组时所用的数组长度竟然是 SizeOf(arr); 这不合适! 如果是一维数组.且元素大小是一个字节, 这样用看不出错误, 譬如:  -------------------------------------------------------------------------------- vararr1: array[0..9] of Char;arr2: array[0..9] o

给出一个数组A,找出一对 (i, j)使得A[i] &lt;= A[j] (i &lt; j)并且j-i最大

题目:给出一个数组A,找出一对 (i, j)使得A[i] <= A[j] (i <= j)并且j-i最大 ,若有多个这样的位置对,返回i最小的那一对. 最直接的想法就是对于每一个 i 从数组最尾端开始向前找到第一个大于等于 A[i] 的位置 j ,时间复杂度O(n^2). 1. pair<int, int> find(const vector<int> &A) 2. { 3. int n = A.size(); 4. if(n == 0) 5. throw ne

《团队开发一(求一个数组的连续的子数组之和的最大值)》

(1)设计思想:一般的,求一个数组的最大子数组之和即是按数组顺序依次让前几个数的和与下一个数进行比较,设一变量来装每次比较后的较大的数,依此进行到数组终端:但是考虑到求的是连续的子数组,则应该想到除了在按顺序上的连续外,还得考虑到末端与首端的连续,所以按数组顺序依次求解得到的未必就是连续的最大的子数组之和,故此必须在此种情况下也求解出最大子数组之和,方法即是同时从数组的两端依次进行求出各自的最大子数组之和,然后在相遇前求和后与之前所求的最大子数组之和依次相比较,取它们中最大的一个作为连续的最大子

《返回一个数组的最大值》

设计思想:手动或使用随机函数生成一系列数组成一个数组,设计求数组中最大值的函数,在主函数中调用即可:但是考虑到用户的各种需求与程序的各种不一致性,为此设计了相关的能柔和两种状态下的各种情况测试提醒: (1)计算机会对用户有意无意输入的数组长度为0,复数,或大于分配的内存空间情况而对用户做不了用户满意的应答,故在程序中加一段对用户输入的数组长度判断的测试,则用户便可根据系统的提示一步步进行即可. (2)由于用户的无意性,可能会混淆键入不同的数据类型,然而计算机并不能愉快的解决此问题为用户得来满意的