算法求助!!!

qq_29905661 2015-07-23 01:36:52
一串字符:-1,-2,-3,0,1,2,3,4,-5,-2,2,4,6,8,-3,2,6,12,4
要求:从头开始取数,
取大于0的数,直到出现负数为止,那么这一段之间的数,为第1段
然后,继续往后取数,同样取大于0直到出现负数,这段为第2段
......依次类推(中间不知道有几段)
最终,
取最后一段,同样取大于0,但最后的数不一定是正,负,0,没有规律,不过还是视为最后一段

最终结果如下:
第1段,1,2,3,4
第2段,2,4,6,8
最后一段,2,6,12,4

谢谢大家帮忙,上次也发了,但是我没说清楚,这次补一下,谢谢!
...全文
111 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_29905661 2015-07-23
  • 打赏
  • 举报
回复
引用 3 楼 starfd 的回复:
有注意过加了一段的字么
可以的了,谢谢你!
  • 打赏
  • 举报
回复
有注意过加了一段的字么
ajianchina 2015-07-23
  • 打赏
  • 举报
回复
就按你的字符串来,不是就自己改,结果在sArr数组里头自己取。

string s = "1,-2,-3,0,1,2,3,4,-5,-2,2,4,6,8,-3,2,6,12,4";
s = ("," + s).Split(',').Aggregate((n, m) =>
{
    return (m[0] == '-' || m[0] == '0') ? n + "|" : n + "," + m;
});
string[] sArr = s.Split('|').Where(p => p.Length > 0).Select(p => p.Remove(0, 1)).ToArray();
qq_29905661 2015-07-23
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
int[] arr = { 1, -1, -2, -3, 0, 1, 2, 3, 4, -5, -2, 2, 4, 6, 8, -3, 2, 6, 12, 4 };
int prevIndex = -1;
for (int i = 0; i <= arr.Length; i++)
{
    var v = i == arr.Length ? -1 : arr[i];
    if (v <= 0)
    {
        if (prevIndex >= 0)
        {
            Console.WriteLine(string.Join(",", arr.Skip(prevIndex).Take(i - prevIndex)));
            prevIndex = -1;
        }
    }
    else if (prevIndex < 0)
    {
        prevIndex = i;
    }
}
还加了一段
试了下,不对耶
  • 打赏
  • 举报
回复
int[] arr = { 1, -1, -2, -3, 0, 1, 2, 3, 4, -5, -2, 2, 4, 6, 8, -3, 2, 6, 12, 4 };
int prevIndex = -1;
for (int i = 0; i <= arr.Length; i++)
{
    var v = i == arr.Length ? -1 : arr[i];
    if (v <= 0)
    {
        if (prevIndex >= 0)
        {
            Console.WriteLine(string.Join(",", arr.Skip(prevIndex).Take(i - prevIndex)));
            prevIndex = -1;
        }
    }
    else if (prevIndex < 0)
    {
        prevIndex = i;
    }
}
还加了一段

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧