线性搜索目标
Posted
技术标签:
【中文标题】线性搜索目标【英文标题】:Linear searching for a target 【发布时间】:2017-04-22 01:45:55 【问题描述】:作为我课堂上编码挑战的一部分,我们必须编写代码来提供 10 种不同的任务。
在此任务中,我的目标是创建一个线性搜索算法,在数组中搜索特定项目,如果找到则显示其位置。
这是我当前的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Linearsearch2
class Program
static void Main(string[] args)
var array = new int[] 1, 31, 10, 9, 420, -5, 77, 420, 300, 99 ; //Sets up the array
var targetvalue = 77; //Establishes what number the search will attempt to find.
var targetpos = -1; //Establishes the position in the array of the target.
var targetnumber = 0; //Establishes the counter for the number of times the target appears.
bool found = false; //Decides wether to change the number or use a counter method.
var foundpositions = new int[] ; //Establishes an array which will hold the positions of located items
for (var i = 1; i < array.Length; i++)
if (found == true && array[i] == targetvalue)
targetnumber = targetnumber + 1;
if (found == false && array[i] == targetvalue) //If the target value has not been found yet
foundpositions.Add(i); //This is the line i need help with. I dont know how to add a value to an array properly.
found = true;
if (targetpos != -1) //If the target number was found
Console.WriteLine("The number " + targetvalue + " appeared " + targetnumber + " times, at positions " + foundpositions + "."); // Prints the final outcome.
else //If the target number was not found
Console.WriteLine("The number " + targetvalue + " did not appear in this array."); // Prints the final outcome.
我需要帮助的问题是第 31 行, foundpositions.Add(i);
我不知道正确向数组添加值的行,这似乎是导致问题的原因。 (在这一行中,我试图将搜索的当前位置添加到稍后将显示的数组中)
感谢您的帮助。此外,如果有任何其他明显的、明显的错误,请指出它们,我们将不胜感激。
【问题讨论】:
您能解释一下为什么要检查是否找到目标吗?这似乎没有必要。 【参考方案1】:我需要帮助的问题是第 31 行, foundpositions.Add(i);
数组不是动态的,它们没有add()
方法。你可以改用List
。
替换这个:
var foundpositions = new int[] ;
用这个:
var foundpositions = new List<int>();
另外,你似乎没有对这个声明的变量做任何事情:
var targetpos = -1;
因此控制将永远进入这个if
块:
if (targetpos != -1) //If the target number was found
Console.WriteLine("The number " + targetvalue + " appeared " + targetnumber + " times, at positions " + foundpositions + "."); // Prints the final outcome.
在这个任务中,我的目标是制作一个线性搜索算法 在数组中搜索特定项,并显示其 位置(如果找到)。
您的代码目前看起来似乎有几个错误。但是,下面的示例将帮助您入门:
public static int LinearSearch(int[] items, int target)
if (items == null) throw new ArgumentNullException("argument items has null reference");
if (items.Length == 0) return -1; // return -1 if the item is not found
for (int i = 0; i < items.Length; i++)
if (items[i] == target) return i;
return -1; // return -1 if the item is not found
然后只需在 main
方法中调用 LinearSearch
并传入所需的数据即可。
不要忘记将 LinearSearch
的返回值分配给变量,或者直接将其打印到控制台。
【讨论】:
【参考方案2】:我不确定您为什么要检查是否找到目标号码。如果您想获取与目标 int 相等的所有 int 的数组中的索引,那么您可以简单地遍历数组并将匹配项放入 int 列表中,然后返回此列表。
这个返回列表的计数将告诉您有多少匹配目标,并且列表将包含这些匹配的索引。似乎没有任何理由在遍历数组时检查是否找到了目标。如果返回的列表为空,则未找到目标。下面的代码使用了这种方法。我希望我没有遗漏什么。
private static void FindTargets()
var array = new int[] 1, 31, 10, 9, 420, -5, 77, 420, 300, 99, 1, 31, 10, 9, 420, -5, 77, 420, 300, 99 ; //Sets up the array
int target = 77;
List<int> foundTargets = GetPositions(target, array);
StringBuilder sb = new StringBuilder();
sb.Append("There are " + foundTargets.Count + " int(s) that match " + target + Environment.NewLine);
sb.Append("The array indexs for the target ints " + target + " are: ");
int count = 0;
foreach (int curInt in foundTargets)
sb.Append(curInt);
if (count < foundTargets.Count - 1)
sb.Append(", ");
count++;
Console.WriteLine(sb.ToString());
private static List<int> GetPositions(int target, int[] intArray)
List<int> foundTargets = new List<int>();
for (int i = 0; i < intArray.Length; i++)
if (intArray[i] == target)
foundTargets.Add(i);
return foundTargets;
【讨论】:
以上是关于线性搜索目标的主要内容,如果未能解决你的问题,请参考以下文章