北京映急物流有限公司 面试.net软件工程师岗位

2023-09-13 09:57:14

请实现以下算法,语言不限,也可以是伪代码。


1.有一个数组 a[1000]存放了1000整数,这 1000 个数都大于等于 1,小于等于999,并且只有两个数是相同的,剩下的 998 个数均不相同。请写一个最优搜索算法,找出相同的那个数的值,并给出该算法的时间复杂度。

两种方法,

1、先把数组从小到大排序,再用二分法查找。

2、运用冒泡排序

第一种方案代码

 private void button13_Click(object sender, EventArgs e)
        {
            int[] data = new int[1000];
            for (int k = 0; k < data.Length; k++)
            {
                data[k] = k+1;
            }
            data[569] = 567;
            // 添加测试数据
            result(data);
        }


        /**
        * 调用分搜索算法的方法实现查找相同元素
        * @param data
        */
        public static void result(int[] data)
        {
            Array.Sort(data);
            for (int i = 0; i < data.Length; i++)
            {
                int target = data[i];
                data[i] = 0;
                int result = binaryFind(data, target);
                if (result != -1)
                {
                    MessageBox.Show("result="+ i + "data[result]" + data[result].ToString());
                    //System.out.println(“相同元素为:” data[result]);
                    break;
                }
            }
        }
        /*二分搜索算法实现
        *
        * @param data
        * 数据集合
        * @param target
        * 搜索的数据
        * @return 返回找到的数据的位置,返回-1表示没有找到。
        */
        public static int binaryFind(int[] data, int target)
        {
            int start = 0;
            int end = data.Length - 1;
            while (start <= end)
            {
                int middleIndex = (start + end) / 2;
                if (target == data[middleIndex])
                {
                    return middleIndex;
                }
                if (target >= data[middleIndex])
                {
                    start = middleIndex + 1;
                }
                else
                {
                    end = middleIndex - 1;
                }
            }
            return -1;
        }

第二种方案代码

 int[] data = new int[1000];
            for (int k = 0; k < data.Length; k++)
            {
                data[k] = k + 1;
            }
            data[999] = 1;
            

            int result=-1;
            for (int i = 0; i < data.Length - 1; i++)
            {
                for (int j = 0; j < data.Length - 1; j++)
                {
                    int k = j + 1;
                    if (data[j] > data[k])
                    {
                        //交换位置
                        data[j] = data[j] + data[k];
                        data[k] = data[j] - data[k];
                        data[j] = data[j] - data[k];
                    }
                    else
                    {
                        if (data[j] == data[k])
                        {
                            result = data[j];
                            break;
                        }
                    }

                }
            }
            StringBuilder stringBuilder = new StringBuilder();
            for (int k = 0; k < data.Length; k++)
            {
                stringBuilder.AppendLine($"data[{k}]={data[k]}");
            }
            MessageBox.Show("result=" + result + stringBuilder.ToString());

2.给出任意正整数x(x小于2的31次幂),求不比x小且是2的整数次幂中最小的值Y。例如X=7,则Y为8;X=8,则Y为8。

using System;  
  
class Program  
{  
    static void Main(string[] args)  
    {  
        Console.Write("Enter a number X: ");  
        int X = Convert.ToInt32(Console.ReadLine());  
  
        int Y = FindNextPowerOfTwo(X);  
  
        Console.WriteLine($"The smallest power of two that is not less than X is {Y}");  
    }  
  
    static int FindNextPowerOfTwo(int X)  
    {  
        if ((X & (X - 1)) == 0)  
            return X;  
  
        return 1 << (31 - (31 - 1 - BitPosition(X - 1)));  
    }  
  
    static int BitPosition(int n)  
    {  
        int pos = 0;  
        while (n != 0)  
        {  
            n >>= 1;  
            pos++;  
        }  
        return pos;  
    }  
}


3.现有一数据文件 data.csv,里面有1000万条时序数据(按时间升序),共两列,第1列为时间(日期时间类型,到秒),第2列为值(单精度类型)。请输出每分钟的平均值。数据格式如下:

...
2017\8\6 5:14:00,803.1387
2017\8\6 5:14:01,803.142
2017\8\6 5:14:02,803.1453
2017\8\6 5:14:03,803.1486
2017\8\6 5:14:04,803.152
2017\8\6 5:14:05,803.1553
2017\8\6 5:14:06,803.1586
2017\8\6 5:14:07,803.1619
2017\8\6 5:14:08,803.1652

using System;  
using System.IO;  
using System.Linq;  
using System.Collections.Generic;  
  
public class Data  
{  
    public DateTime Time { get; set; }  
    public float Value { get; set; }  
}  
  
public class Program  
{  
    public static void Main()  
    {  
        var data = new List<Data>();  
  
        using (var reader = new StreamReader("data.csv"))  
        {  
            while (!reader.EndOfStream)  
            {  
                var line = reader.ReadLine();  
                var parts = line.Split(',');  
                data.Add(new Data  
                {  
                    Time = DateTime.Parse(parts[0]),  
                    Value = float.Parse(parts[1])  
                });  
            }  
        }  
  
        var groupedData = data.GroupBy(x => x.Time.Minute)  
                              .Select(g => new   
                              {   
                                  Minute = g.Key,   
                                  AverageValue = g.Average(x => x.Value)   
                              });  
  
        foreach (var item in groupedData)  
        {  
            Console.WriteLine($"Minute: {item.Minute}, Average Value: {item.AverageValue}");  
        }  
    }  
}

4.请输出 2的1000 次方的值。

using System;  
using System.Numerics;  
  
class Program  
{  
    static void Main()  
    {  
        BigInteger result = BigInteger.Pow(2, 1000);  
        Console.WriteLine("2的1000次方的值为: " + result);  
    }  
}

10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376

更多推荐

用于设计 CNN 的 7 种不同卷积

一说明最近对CNN架构的研究包括许多不同的卷积变体,这让我在阅读这些论文时感到困惑。我认为通过一些更流行的卷积变体的精确定义,效果和用例(在计算机视觉和深度学习中)是值得的。这些变体旨在保存参数计数、增强推理并利用目标问题的某些特定特征。这些变体中的大多数都简单易懂,因此我专注于了解每种方法的优点和用例。这些知识有望帮

【数据结构】优先级队列(堆)

文章目录💐1.优先级队列1.1概念💐2.堆的概念及存储方式2.1什么是堆2.2为什么要用完全二叉树描述堆呢?2.3为什么说堆是在完全二叉树的基础上进行的调整?2.4使用数组还原完全二叉树💐3.堆的常用操作-模拟实现3.1堆的创建3.1.1堆的向下调整(大根堆为例)3.1.2建堆的时间复杂度3.2堆的插入和删除3.

mysql主从复制

为什么要搭建主从架构主库出现问题,可以快速切换到从库提供服务。读写分离,降低主库的访问压力。可以在从库中执行备份,以避免备份期间影响主库的服务。主从复制原理Master将数据变化记录到binlog。Slaver通过一个IO线程来拉取Master上的binlog,写到relaylog中。Slaver的Sql线程将rela

堆的介绍与堆的实现和调整

个人主页:Lei宝啊愿所有美好如期而遇目录​​堆的介绍:关于堆的实现及相关的其他问题:堆的初始化:堆的销毁:插入建堆:堆向上调整:交换两个节点的值:堆向下调整:删除根节点:求堆顶数据:打印堆的每一个节点的值:堆排序:堆的节点数量:判断堆是否为空:创建一个多数据文件:TopK问题(综合):向上/向下调整建堆哪个时间复杂度

24 DRF详细学习篇章一|Requests|Responses|View|Routers

文章目录快速入门你可能搞混的知识重写preform_与重写saveRequests请求原本的Django的request(⭐).data(⭐⭐⭐).query_params(⭐⭐⭐).parsers(⭐).accepted_renderer(⭐⭐).accepted_media_type(⭐⭐).user(⭐⭐⭐).a

Mybatis学习笔记5 面向接口CRUD练习

Mybatis学习笔记4用javassist动态实现DAO接口基于接口的CRUD_biubiubiu0706的博客-CSDN博客新建项目大致目录结构核心配置文件日志配置文件,只需要引入logback依赖配置文件名为logback.xml即可<?xmlversion="1.0"encoding="UTF-8"?><con

【数据结构】LinkedList与链表

文章目录1.ArrayList的缺陷2.链表2.1链表的概念及结构2.2链表的实现1.链表的功能2.初始化链表3.实现功能接口3.1头插添加元素3.2尾插法添加新元素3.3找到下标的前驱节点3.4指定位置插入元素3.5指定元素是否存在3.6找到指定元素的前驱节点3.7删除指定节点3.8删除所有元素为key的节点3.9链

智慧养殖:浅谈视频监控与AI智能识别技术助力奶牛高效、智慧养殖

一、方案背景随着科技的飞速发展,智能化养殖逐渐成为现代畜牧业的发展趋势。人工智能技术、物联网、视频技术、云计算、大数据等新兴技术,正在为奶牛养殖业带来全新的变革。越来越多的牧场、养殖场开始运用新技术来进行智能监管、提高生产效率、降低生产成本,助力饲养成本高的养殖业,向数字化、智能化、无人化发展方向转型。二、方案概述TS

计算机硬件设备和网络硬件设备

计算机硬件设备计算机硬件设备是指构成计算机系统的各种实体部件,包括以下几类常见设备:1、中央处理器(CentralProcessingUnit,CPU)2、内存(RandomAccessMemory,RAM)3、硬盘驱动器(HardDiskDrive,HDD)4、显卡(GraphicsProcessingUnit,GP

uni-app 之 vue位置怎样设置

vue位置怎样设置VUE是一款流行的JavaScript框架,可以构建动态用户界面。在VUE中,位置的设置是非常重要的,因为它会影响到页面元素的布局。下面将详细介绍VUE中位置设置的基本概念以及如何使用VUE进行位置设置。在VUE中,位置设置一般使用CSS的position属性来实现。position属性有四个属性值:

Spring Boot魔法:简化Java应用的开发与部署

文章目录什么是SpringBoot?1.自动配置(Auto-Configuration)2.独立运行(Standalone)3.生产就绪(ProductionReady)4.大量的起步依赖(StarterDependencies)SpringBoot的魔法1.起步依赖(StarterDependencies)2.自动配

热文推荐