use*_*670 1 .net c# arrays algorithm data-structures
我想做的事情在下面的评论中描述.我怎么能有效率地做?
using System;
using System.Collections.Generic;
using System.IO;
class Solution {
static void Main(String[] args) {
int n = Int32.Parse(Console.ReadLine());
bool[][] flags = new bool[26][n]; // I want this to be a 26 x n array of false values
for(int k = 0; k < n; ++k)
{
string line = Console.WriteLine();
for(int i = 0; i < line.Length; ++i)
flags[(int)line[i] - (int)'a'] = true;
}
int gems = flags.Count(arr => arr.Count(j => j == true) == arr.Length);
Console.WriteLine
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
LINQ应该可以很好地实现您的目标:
bool[][] flags = Enumerable.Range(0, 26).Select(_ => Enumerable.Repeat(true, n).ToArray()).ToArray();
Run Code Online (Sandbox Code Playgroud)
或者正如Jim Mischel所说:
bool[][] flags = Enumerable.Repeat(Enumerable.Repeat(true, n).ToArray(), 26).ToArray();
Run Code Online (Sandbox Code Playgroud)
但是第一个示例使用较少的内存,因为该Select方法Enumerable.Repeat(true, n).ToArray()在通过项目时不会重新定义.
如果您正在寻找二维数组,您可以简单地执行此操作。
bool[,] flags = new bool[26,n];
//or
bool[,] flags = new bool[,];
bool[,] flags = new bool[26,];
Run Code Online (Sandbox Code Playgroud)
如果它是锯齿状数组,你可以这样做。
bool[][] flags1 = new bool[26][];
flags1[0] = new bool[n]; // since you want n elements
flags1[1] = new bool[n];
...
// initialization
flags1[0] = new bool[] {true, false};
flags1[1] = new bool[] {false};
Run Code Online (Sandbox Code Playgroud)