📜  如何在 GeeksforGeeks 上撰写 DSA 文章?

📅  最后修改于: 2022-05-13 01:58:11.037000             🧑  作者: Mango

如何在 GeeksforGeeks 上撰写 DSA 文章?

GeeksforGeeks 为所有编码爱好者提供了一个机会,通过编写编码或基于 DSA 的文章来展示他们的编程以及数据结构和算法技能。然而,很多人(尤其是大学生或初学者)发现很难在 GeeksforGeeks 上表达他们的学习和技能并做出贡献。但是现在问题已经解决了,因为本文将指导您完成在 GeeksforGeeks 上编写编程/DSA 文章的整个过程和指南

DSA 文章写作指南

让我们开始吧:

首先,您需要知道如何开始在 GFG 撰写文章以及其他各种基本方面,例如您为什么要贡献、在哪里写作等。您可以查看此链接以全面了解所有这些细节.

如何验证我们是否可以写文章?

现在,您需要检查是否可以就特定主题/问题撰写文章。您可以按照以下步骤执行相同操作:

  1. 在 GeeksforGeeks 上的自定义搜索中搜索标题和问题陈述。如果存在,请不要写。
  2. 然后在 Google 上搜索标题、问题陈述和示例(一起和/或单独),以查找来自其他网站的相关现有链接。如果在某个地方也有相同的内容,例如 Codility、Codeforces 等,这将导致抄袭,因此不能被接受。
  3. 搜索一些基本的变体或概括的问题陈述。如果被发现,将被视为抄袭。

如果文章通过了以上几点,就可以写文章了。

编码文章格式和指南

进一步,让我们查看在 GeeksforGeeks 上编写编码文章时需要遵循的格式和指南。编程文章应包含以下几点:

  1. 问题陈述
  2. 例子(二)。解释示例以正确理解我们是如何实现结果的。
  3. 该方法的先决条件链接(如果有)。
  4. 用于解决问题的方法。
    1. 一、基本的想法或直觉
    2. 然后分步说明这种方法将如何工作
    3. 使用粗体、blockquote或 pre突出显示任何重要的观察或要点
  5. 实施/代码。如果有多种语言的代码,顺序应该是 C++、 Java、Python3、C#。请注意,不接受Python 2 代码,但接受Python 3 代码。
  6. 时间复杂度和辅助空间,以及用于表达这些的术语的解释。

请尽量保持语言简单、具体,不要使用 I、you、we 等代词

方法格式

如果方法是:

上式可以写成:

示例方法:

问题 - 在 NxN 板上打印设置 N 件的所有独特组合

如何在文章中添加代码?

再往前走,现在需要了解一下文章中添加代码的过程。如下:

您可以使用“添加代码”按钮添加代码。

在 GFG 文章中添加代码

要添加多种编程语言的代码,您可以选择添加另一种语言选项,如下所示。之后点击继续按钮。

添加多语言代码

如果您的代码由于任何原因(例如编译器不支持的库、您希望演示错误等)而无法编译或运行,请取消选中 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 的审稿人指导。

请参阅下面的示例图像,以清楚地了解数组的图像创建:

C# 数组

重点(附例子)

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 的问题。