程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Summary Ranges,summaryranges

Summary Ranges,summaryranges

編輯:C++入門知識

Summary Ranges,summaryranges


題目

Given a sorted integer array without duplicates, return the summary of its ranges.

For example, given [0,1,2,4,5,7], return ["0->2","4->5","7"].

分析

    題目的意思就是將vector中的數,表示為一個range的形式(string)。這是一道簡單的算法題,但是需要注意的地方比較多。首先函數中肯定要將vector<int>轉換成vector<string>,雖然 c++中保留了c語言中的那一套格式化字符串處理函數(sprintf()),但是不建議使用。我選擇的是ostringstream,它是從ostream繼承而來,頭文件是<sstream>,其用法和iostream類似,非常方便。

   值得一提的是,不熟悉的同學通常會把clear()當做清除ostringstream流,其作用是清除錯誤標志。 代碼中我在清空的時候使用的這樣的形式:

     ostringstream oss;

   oss.str("");

    復雜度O(n),AC。

 1 class Solution {//不要忘記清空
 2 public:
 3     vector<string> summaryRanges(vector<int>& nums) {
 4         if (nums.empty())
 5             return vector<string>();
 6         vector<string> v;
 7         ostringstream oss;
 8         auto pre = nums.begin();
 9         auto back = pre + 1;
10         int i = 1;
11         while (back != nums.end())
12         {
13             if (*pre == *back - i)
14             {
15                 oss.str("");
16                 oss << *pre << "->" << *back;
17                 ++back;
18                 ++i;
19             }
20             else if (back-pre != 1)//前面一段是連續的
21             {
22                 v.push_back(oss.str());
23                 oss.str("");
24                 pre = back;
25                 i = 1;
26                 ++back;
27             }
28             else
29             {
30                 oss << *pre;
31                 v.push_back(oss.str());
32                 oss.str("");
33                 pre = back;
34                 i = 1;
35                 ++back;
36             }
37         }
38         if (i == 1)
39             oss << *pre;//上一段不是連續的,把那個孤立的值打印出來
40         v.push_back(oss.str());
41         return v;
42     }
43 };

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved