1.已知一个固定大小的数值数组,且该数组中的数值为常数,请设计一个尽可能快速的算法计算两个下标间所有数值的和。2.已知数组Array是一个已排序的数组,给出一个指定的值要求输出该值在数组中的下标,如果该值不存在则返回-1,写出适合 所有排序类型的查找函数和实现
解决方案 »
- C# WinForm程序 客户自定义界面 ! 求助 谢谢
- C#中如何让窗体里的内容随着窗体的改变而改变?
- 有一段SQL在PLSQL里能执行,但是在C#里却执行不了,是什么原因?
- PrintDocument 如在 PrintPreviewDialog有效缩放?
- HttpWebRequest远程读取需验证登录的网页文件的问题
- 如何捕获usb摄像头的数据???
- 如何编写一个解析函数?
- 调用GetInstanceState("frmClass")函数发生错误
- 下拉列表的问题
- 俺用一个TcpListener来监听一个端口,用一个TcpClient来访问这个端口,如何才能得到这个TcpClient的IP?
- DataGridView问题
- 按钮问题
2: 由于是已按好的序列,可以采用二分查找算法. 时间复杂度 log(n).
2、二分法查找是最快的
if( a < b) return -1; // index error
int sum = 0;
for(int i = a; i <=b; ++i)
sum += arr[i];return sum;
var array = Enumerable.Range(1, 100).ToArray();
int index1 = 3, index2 = 5;
var sum = array.Skip(index1).Take(index2 - index1 + 1).Sum();
int value = 50;
var index = Array.IndexOf(array, value);
--------------------
没有比for更快的了2.已知数组Array是一个已排序的数组,给出一个指定的值要求输出该值在数组中的下标,如果该值不存在则返回-1,写出适合 所有排序类型的查找函数和实现
--------------------
已排序的,查找,难道不是折半最快?
var array=new int[]{1,3,5,6,7,8,9};
//1
var sum=array.Skip(minindex).Take(maxindex-minindex).Sum();
//2
var idx=array.Select((item, index)=>new{item,index}).FirstOrDefault(f=>f.item==value);
var ridx=idx==null??-1:idx;