例子问题
问题21:计算机科学
下面哪一个实现了一个名为包含
顺序搜索数组,确认数组是否包含所请求的元素?
其他答案都不对
公共布尔包含(int[] arr, int val) {
For (int I = 0;I < arr.length;我+ +){
如果(arr[i] == val) {
返回true;
}
}
返回错误;
}
公共布尔包含(int[] arr, int val) {
布尔成功;
For (int I = 0;I <= arr.length;我+ +){
如果(arr[i] == val) {
成功=真;
} else {
成功= false;
}
}
返回成功;
}
Public int包含(int[] arr, int val) {
Int success = -1;
For (int I = 0;I < arr.length;我+ +){
如果(arr[i] == val) {
Success = val;
}
}
返回成功;
}
公共布尔包含(int[] arr, int val) {
For (int I = 0;I < arr.length;我+ +){
If (arr[i] != val) {
返回错误;
}
}
返回true;
}
公共布尔包含(int[] arr, int val) {
For (int I = 0;I < arr.length;我+ +){
如果(arr[i] == val) {
返回true;
}
}
返回错误;
}
实现顺序搜索的基本方法是测试数组的每个元素,直到匹配您想要查找的值。所有这些可能的答案都非常接近这个。它们都遍历给定的数组。它们都检查值。但是,有一个选项(使用if-else逻辑)即使找到了元素也可能返回false,因为它在找到元素后继续运行。如果数组后面的另一个值不匹配,则该变量成功
然后设置为假
。这将被返回,表示未能找到该值。整数返回方法似乎很好,但是如果搜索的值是- 1,它将是不明确的。在这种情况下,这个返回值不一定表示已经找到了它——它可能只是表示没有找到任何东西的“标志”。因此,这里最简单的方法是最好的:返回真正的
一找到就去。
问题21:标准操作与算法
Public static int foo(int[] arr, int x) {
For (int I = 0;I < arr.length;我+ +){
如果(arr[i] == x) {
返回我;
}
}
返回1;
}
给定上面定义的方法,下面代码输出单词“indubitable !”的次数是多少?
Int [] vals = {1,4,51,3,14,91,130,14};
For (int I = 0;I < 20;我+ +){
If (foo(vals,i%4) < 0) {
System.out.println(“无疑!”);
}
}
没有一个
4
2
5
10
10
为了使这个问题更简单,首先注意喷火方法实现顺序搜索。(这种搜索只是遍历数组的每个元素,看看它是否等于探测值。)如果找到,它将返回索引。否则,它返回-1。现在,在问题本身的代码块中,循环从i = 0迭代到i = 19。但是,它将只对值0…3执行搜索。这是因为模数运算符。因此,它将做(从0到19),0…3 .共5次。因此,它将探测1和3五次——它们都在数组中。因此,单词“indubitable !”将总共输出10次。
问题1:搜索
真或假。
顺序搜索比二分搜索更有效。
假
真正的
假
顺序搜索的运行时间为O(N)。二分查找的运行时间是O(log(N))。因为顺序搜索必须遍历列表中的每个元素至少一次,所以效率较低。