如何在 GeeksforGeeks 上撰写 DSA 文章?
GeeksforGeeks 为所有编码爱好者提供了一个机会,通过编写编码或基于 DSA 的文章来展示他们的编程以及数据结构和算法技能。然而,很多人(尤其是大学生或初学者)发现很难在 GeeksforGeeks 上表达他们的学习和技能并做出贡献。但是现在问题已经解决了,因为本文将指导您完成在 GeeksforGeeks 上编写编程/DSA 文章的整个过程和指南。
让我们开始吧:
首先,您需要知道如何开始在 GFG 撰写文章以及其他各种基本方面,例如您为什么要贡献、在哪里写作等。您可以查看此链接以全面了解所有这些细节.
如何验证我们是否可以写文章?
现在,您需要检查是否可以就特定主题/问题撰写文章。您可以按照以下步骤执行相同操作:
- 在 GeeksforGeeks 上的自定义搜索中搜索标题和问题陈述。如果存在,请不要写。
- 然后在 Google 上搜索标题、问题陈述和示例(一起和/或单独),以查找来自其他网站的相关现有链接。如果在某个地方也有相同的内容,例如 Codility、Codeforces 等,这将导致抄袭,因此不能被接受。
- 搜索一些基本的变体或概括的问题陈述。如果被发现,将被视为抄袭。
如果文章通过了以上几点,就可以写文章了。
编码文章格式和指南
进一步,让我们查看在 GeeksforGeeks 上编写编码文章时需要遵循的格式和指南。编程文章应包含以下几点:
- 问题陈述
- 例子(二)。解释示例以正确理解我们是如何实现结果的。
- 该方法的先决条件链接(如果有)。
- 用于解决问题的方法。
- 一、基本的想法或直觉
- 然后分步说明这种方法将如何工作
- 使用粗体、blockquote或 pre突出显示任何重要的观察或要点。
- 实施/代码。如果有多种语言的代码,顺序应该是 C++、 Java、Python3、C#。请注意,不接受Python 2 代码,但接受Python 3 代码。
- 时间复杂度和辅助空间,以及用于表达这些的术语的解释。
请尽量保持语言简单、具体,不要使用 I、you、we 等代词
方法格式
如果方法是:
We create a mark[] array of Boolean type. We iterate through all the characters of our string and whenever we see a character we mark it. Lowercase and Uppercase are considered the same. So ‘A’ and ‘a’ are marked in index 0 and similarly ‘Z’ and ‘z’ are marked in index 25.
上式可以写成:
This approach is based on Hashing.
- A Hashing data structure of boolean type is created of size 26, such that index 0 represents the character ‘a’, 1 represents the character ‘b’, and so on.
- Traverse the string character by character and mark the particular character as present in the Hash.
- After complete traversal and marking of the string, traverse the Hash and see if all characters are present, i.e. every index has true. If all are marked, then return true, else False.
示例方法:
问题 - 在 NxN 板上打印设置 N 件的所有独特组合
Approach: This problem can be solved by using recursion to generate all possible solutions. Now, follow the steps below to solve this problem:
- Create a function named allCombinations, which will generate all possible solutions.
- It will take an integer piecesPlaced denoting the number of total pieces placed, integer N denoting the number of pieces needed to be placed, two integers row and col denoting the row and column where the current piece is going to be placed and a string ans for storing the matrix where pieces are placed, as arguments.
- Now, the initial call to allCombinations will pass 0 as piecesPlaced, N, 0 and 0 as row and col and an empty string as ans.
- In each call, check for the base case, that is:
- If row becomes N and all pieces are placed, i.e. piecesPlaced=N. Then print the ans and return. Else if piecesPlaced is not N, then just return from this call.
- Now make two calls:
- One to add a ‘*’ at the current position, and one to leave that position and add ‘-‘.
- After this, the recursive calls will print all the possible solutions.
如何在文章中添加代码?
再往前走,现在需要了解一下文章中添加代码的过程。如下:
您可以使用“添加代码”按钮添加代码。
要添加多种编程语言的代码,您可以选择添加另一种语言选项,如下所示。之后点击继续按钮。
如果您的代码由于任何原因(例如编译器不支持的库、您希望演示错误等)而无法编译或运行,请取消选中 Enable Run on Ide 选项以从代码中删除运行按钮。当您尝试使用“添加代码”按钮旁边的“附加输出”按钮附加输出时,此按钮还可以避免错误。
编码标准
您需要确保遵循以下编码标准:
1)函数名和变量名遵循驼峰式。例如,getMin()、getMax() 和 removeDuplicates()、isPresent 等。
2)驱动代码(或主函数)不包含任何逻辑。它仅包含输入/输出和函数调用。
3)缩进应使用 4 个空格。
4)一行最多 60 个字符,这样程序就可以在移动设备上阅读,而无需太多水平滚动。
C
// Below style should be avoided
int fun(int a, int sumSoFar, int currSum, char val, int *result)
// The above should be written as
int fun(int a, int sumSoFar, int currSum, char val,
int *result)
C++
// Below style should be avoided
cout << "Sample code to understand coding style for more readability of millions of readers" << val;
// The above should be written as
cout << "Sample code to understand coding style for"
<< " more readability of millions of readers"
<< val;
C
// There should be one space after while, no other
// spaces
while (i < 0)
if (x < y)
{
}
C
// No spaces after "reverse" or after "("
void reverse(char* str, int low, int high)
{
while (low < high)
{
swap(&str[low], &str[high]);
++low;
--high;
}
}
// Driver program to test above function
int main()
{
char str[] = "geeksforgeeks";
reverse(str);
return 0;
}
C++
cout << "Sample" << "Example"
C
int x, y, z;
fun(x, y, z);
C
// Should be avoided
int x, y=0;
// Should be followed
int x, y = 0;
// Should be avoided
x+=10;
// Should be followed
x += 10;
Java
// Java program to illustrate sum of two numbers
C++
// Below style should be avoided
cout << "Sample code to understand coding style for more readability of millions of readers" << val;
// The above should be written as
cout << "Sample code to understand coding style for"
<< " more readability of millions of readers"
<< val;
5)如果代码是用Python、 Java和 C/C++ 等多种语言编写的,所有代码的输出应该是相同的。
6)避免使用scanf(或cin)语句。
7) while、if、else、for 中的空格
C
// There should be one space after while, no other
// spaces
while (i < 0)
if (x < y)
{
}
8)函数调用或函数声明不应有任何空格
C
// No spaces after "reverse" or after "("
void reverse(char* str, int low, int high)
{
while (low < high)
{
swap(&str[low], &str[high]);
++low;
--high;
}
}
// Driver program to test above function
int main()
{
char str[] = "geeksforgeeks";
reverse(str);
return 0;
}
9)避免使用 typdef。
10)函数名格式为“ m axOfTwo()”,变量名格式为“max_of_two”或与函数名样式相同。类/结构名称应采用“ C omplexNumber”或“ S uffixTreeNode”形式。宏名称应为大写字母,如 MAX_SIZE。
11)避免使用静态和全局变量。
12)使用 cout 时,必须在 cout 和“<<”之间使用空格,在两个“<<”之间使用空格。例如:
C++
cout << "Sample" << "Example"
13)声明列表和参数传递中逗号后应有空格。
C
int x, y, z;
fun(x, y, z);
14)赋值运算符中应该有空格
C
// Should be avoided
int x, y=0;
// Should be followed
int x, y = 0;
// Should be avoided
x+=10;
// Should be followed
x += 10;
15)在每个程序的开头,请写一行说明程序的目的:
Java
// Java program to illustrate sum of two numbers
注意:强烈建议在数据结构/算法文章中的代码之后添加时间复杂度。
图像创建指南
图像创建指南如下:
- 图像的名称必须是Relevant 。例如,如果图像描述“:“使用链表将两个数字相加”,则图像的标题必须是:使用链表将两个数字相加。
- 如果使用数据包跟踪器构建图像,请尽可能发送屏幕录像代替图像。
- 如果是屏幕截图,请在输出中的某处添加 GeeksforGeeks(或 GFG)。例如,它可能是文件夹名称、图像标题等。
- 必须使用某些图像绘图工具(例如:Google 绘图、MS Paint、https://www.draw.io/)创建自己的图像。不得从任何其他来源获取图像以避免任何版权问题。您可以按照以下指南创建 GeeksforGeeks 风格的图像:
- 图像的边界/轮廓应为黑色。
- 要写的文字应该是绿色的。
- 我们优先使用白色背景,如果需要其他背景颜色,请在文本中使用绿色作为背景和白色。
- 红色应该用于显示动作、表现、变化和其他事物。
- 如果图片需要更多颜色,请联系 GeeksforGeeks 的审稿人指导。
请参阅下面的示例图像,以清楚地了解数组的图像创建:
重点(附例子)
1.如果方法非常简单或简洁,则无需提及解决问题的分步要点——解决问题的步骤可以在单个段落中涵盖。例如——查看这篇文章:将元素转换为正方形后对链表进行排序
2.在数据结构/算法文章中的代码后添加时间复杂度和辅助空间。查看文章以供参考:在 NxN 板上打印设置 N 件的所有独特组合
3.在使用有效方法解决问题时,您首先需要说明为什么它比幼稚/旧方法更好。例如——查看这篇文章: Count of pairs (arr[i], arr[j]) such as arr[i] + j and arr[j] + i is equal
4.更多示例文章:
- 最大化通过值 i 跳转索引选择的元素 arr[i] 的总和
- 如果连续三元组在给定的二进制数组中可被 3 整除,则通过删除中间元素查找 0 是否被删除更多或 1
- 检查一个数是否可以表示为素数和合数的乘积
注意:由于版权问题,无法发布直接取自 Codility & Codeforces 的问题。