求一个算法啊 求最优解 找出一个数组中小于或等于指定数的最大数

yonglaixiazaide 2013-05-22 06:29:04
int[] array = new[] { 0,3,6,10,17,22};

输入 0 输出 0
输入 2 输出 0
输入 4 输出 3
输入 16 输出 10
输入 21 输出 17
...全文
871 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
yonglaixiazaide 2013-05-24
  • 打赏
  • 举报
回复
引用 16 楼 wddw1986 的回复:
[quote=引用 15 楼 yonglaixiazaide 的回复:] [quote=引用 14 楼 wddw1986 的回复:] [quote=引用 10 楼 yonglaixiazaide 的回复:] [quote=引用 8 楼 wddw1986 的回复:] 当然,我上面说的是无序数组
我题目忘记说了。。有序的。[/quote] 有序的就简单二分查找就可以了。 假设是升序。 跟普通的查找唯一区别就是,普通二分查找是比较a[n]是否等于给定值。 你只要把这个条件改为,如果a[n]等于给定值,那么a[n]就是你要找的。如果a[n]小于给定值,并且a[n+1]大于给定值,那么a[n]是你要找的值。如果a[n+1]等于给定值,那么a[n+1]就是你要找的值。其它情况就继续二分查找。[/quote] 如果没有给定值 需要再在循环完毕 才能找到[/quote] 你细看看[/quote] 。。昨天没仔细看。。刚看了。。你这想法 的确不错。赞一个
wangminxiao_1981 2013-05-23
  • 打赏
  • 举报
回复
输入 0 输出 0 输入 2 输出 0 输入 4 输出 3
cheng2005 2013-05-23
  • 打赏
  • 举报
回复
引用 15 楼 yonglaixiazaide 的回复:
[quote=引用 14 楼 wddw1986 的回复:] [quote=引用 10 楼 yonglaixiazaide 的回复:] [quote=引用 8 楼 wddw1986 的回复:] 当然,我上面说的是无序数组
我题目忘记说了。。有序的。[/quote] 有序的就简单二分查找就可以了。 假设是升序。 跟普通的查找唯一区别就是,普通二分查找是比较a[n]是否等于给定值。 你只要把这个条件改为,如果a[n]等于给定值,那么a[n]就是你要找的。如果a[n]小于给定值,并且a[n+1]大于给定值,那么a[n]是你要找的值。如果a[n+1]等于给定值,那么a[n+1]就是你要找的值。其它情况就继续二分查找。[/quote] 如果没有给定值 需要再在循环完毕 才能找到[/quote] 你细看看
yonglaixiazaide 2013-05-23
  • 打赏
  • 举报
回复
引用 14 楼 wddw1986 的回复:
[quote=引用 10 楼 yonglaixiazaide 的回复:] [quote=引用 8 楼 wddw1986 的回复:] 当然,我上面说的是无序数组
我题目忘记说了。。有序的。[/quote] 有序的就简单二分查找就可以了。 假设是升序。 跟普通的查找唯一区别就是,普通二分查找是比较a[n]是否等于给定值。 你只要把这个条件改为,如果a[n]等于给定值,那么a[n]就是你要找的。如果a[n]小于给定值,并且a[n+1]大于给定值,那么a[n]是你要找的值。如果a[n+1]等于给定值,那么a[n+1]就是你要找的值。其它情况就继续二分查找。[/quote] 如果没有给定值 需要再在循环完毕 才能找到
cheng2005 2013-05-23
  • 打赏
  • 举报
回复
引用 10 楼 yonglaixiazaide 的回复:
[quote=引用 8 楼 wddw1986 的回复:] 当然,我上面说的是无序数组
我题目忘记说了。。有序的。[/quote] 有序的就简单二分查找就可以了。 假设是升序。 跟普通的查找唯一区别就是,普通二分查找是比较a[n]是否等于给定值。 你只要把这个条件改为,如果a[n]等于给定值,那么a[n]就是你要找的。如果a[n]小于给定值,并且a[n+1]大于给定值,那么a[n]是你要找的值。如果a[n+1]等于给定值,那么a[n+1]就是你要找的值。其它情况就继续二分查找。
  • 打赏
  • 举报
回复
引用 8 楼 wddw1986 的回复:
当然,我上面说的是无序数组
嗯,我说大神怎么会犯这样的错误呢.误会了
  • 打赏
  • 举报
回复
引用 7 楼 wddw1986 的回复:
这还用算法吗? 一次遍历就可以了。 时间复杂度O(n)
二分查找的话就是log n了。n很大的话差别还是比较大的。
please_call_me_J 2013-05-23
  • 打赏
  • 举报
回复
引用 7 楼 wddw1986 的回复:
这还用算法吗? 一次遍历就可以了。 时间复杂度O(n)
up,遍历一次,O(n)
yonglaixiazaide 2013-05-23
  • 打赏
  • 举报
回复
引用 8 楼 wddw1986 的回复:
当然,我上面说的是无序数组
我题目忘记说了。。有序的。
yonglaixiazaide 2013-05-23
  • 打赏
  • 举报
回复
引用 7 楼 wddw1986 的回复:
这还用算法吗? 一次遍历就可以了。 时间复杂度O(n)
访问频率和数组长度 都非常大,Log(n)和O(n) 要比么。。
cheng2005 2013-05-23
  • 打赏
  • 举报
回复
当然,我上面说的是无序数组
cheng2005 2013-05-23
  • 打赏
  • 举报
回复
这还用算法吗? 一次遍历就可以了。 时间复杂度O(n)
yonglaixiazaide 2013-05-23
  • 打赏
  • 举报
回复
怎么 都喜欢 linq...既然说了 最优解。。linq在这个需求上不行。用的还是二分,稍微变种了下。 返回的是下标
 private static int Search1(List<int> list, int FindValue)
        {
            int Index = -1;
            int min = 0;
            int max = list.Count - 1;
            int middle = 0;
            while (min <= max)
            {
                middle = (min + max) / 2;

                if (list[middle] == FindValue)
                {
                    Index = middle;
                    return Index;
                }
                else if (list[middle] > FindValue)
                {
                    max = middle - 1;
                }
                else
                {

                    min = middle + 1;
                }
            }

            Index = middle;

            return Index;
        }
yonglaixiazaide 2013-05-23
  • 打赏
  • 举报
回复
引用 楼主 yonglaixiazaide 的回复:
int[] array = new[] { 0,3,6,10,17,22}; 输入 0 输出 0 输入 2 输出 0 输入 4 输出 3 输入 16 输出 10 输入 21 输出 17
我要最优解。。
  • 打赏
  • 举报
回复
数组有序的话,就可以用二分查找了.
神棍 2013-05-22
  • 打赏
  • 举报
回复
array.Max(x => x <= n);
threenewbee 2013-05-22
  • 打赏
  • 举报
回复
or int result = array.Where(x => x < n).Max();
threenewbee 2013-05-22
  • 打赏
  • 举报
回复
int n = int.Parse(Console.ReadLine()); int result = array.OrderBy(x => x).TakeWhile(x => x < n).Last();

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧