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

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


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/78126.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

西门子S7-1200F或1500F系列安全PLC的组态步骤和基础编程(一)

西门子S7-1200F或1500F系列安全PLC的组态步骤和基础编程(一) 第一部分:组态配置 具体步骤可参考以下内容: 如下图所示,新建一个项目后,添加一个安全型PLC,这里以1516F-3 PN/DP为例进行说明, 如下图所示,添加CPU完成后,可以看到左侧的项目树中比普通的PLC多了几个选项…

Markdown和PlantUML的基本使用

首先需要在VS Code中安装Markdown extention和plantUML插件 测试标题 这是测试标题&#xff0c;使用一个#号配合标题 测试1级标题 这是1级测试标题&#xff0c;使用2个#号配合标题 测试2级标题 这是2级测试标题&#xff0c;使用3个#号配合标题 这里是多级列表 Part A S…

leetcode 232 用栈实现队列

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头…

软件测试基础

什么是软件?程序,文档,服务,数据什么是软件测试?尽快尽早的发现中软件存在错误,贯穿整个软件生命周期的确定和验证的过程。项目流程:需求分析 概要设计 详细设计 编码 测试 验收项目的开发模型 瀑布模型 优点:规范了项目的流程 缺点:测试介入的太晚,…

【Docker】Docker简介

Docker简介 &#x1f4cb;导航 1. Docker简介1.1 什么是Docker&#xff1f;1.2 什么是容器&#xff1f;1.3 容器的优势&#xff1f;1.4 Docker的优势&#xff1f;1.5 虚拟技术与容器技术Docker的区别&#xff1f;1.6 为什么学习Docker? 2. 安装Docker3. Docker架构4. Docker命…

Vue3样式绑定

文章目录 Vue3样式绑定1. class 属性绑定1.1 v-bind:class 设置一个对象&#xff0c;从而动态的切换 class1.2 在对象中传入更多属性用来动态切换多个 class1.3 直接绑定数据里的一个对象1.4 绑定一个返回对象的计算属性。这是一个常用且强大的模式1. 5 数据语法1.6 errorClass…

算法通关村第十五关——位运算在查找重复元素中的妙用

前言 大部分算法默认给定的数据量都比较小&#xff0c;只有几个或者几十个元素&#xff0c;但是如果将数据量提高到百万甚至几十亿&#xff0c;那么处理逻辑就会发生很大差异。在海量数据中&#xff0c;普通数据结构都无效了&#xff0c;因为内存空间放不下&#xff0c;常规的…

JAsper:专注于营销领域的AIGC

【产品介绍】 Jasper 由 Dave Rogenmoser&#xff08;CEO&#xff09;、Chris Hull&#xff08;COO&#xff09;和 John Phillip Morgan&#xff08;CTO&#xff09;在2021 年成立&#xff0c;是一款领先的 AI 营销工具以及写作助手。整个jasper官网都会强调自己对营销领域的理…

了解冒泡排序

package com.mypackage.array;import java.util.Arrays;public class Demo07 {public static void main(String[] args) {int[] a {3,2,6,7,4,5,6,34,56,7};int[] sort1 sort1(a); //调用我们自己写的排序方法后&#xff0c;返回一个排序后的数组System.out.println(Array…

Spring Boot 下载文件(word/excel等)文件名中文乱码问题|构建打包不存在模版文件(templates等)

Spring Boot 下载文件(word/excel等)文件名中文乱码问题&#xff5c;构建打包不存在模版文件(templates等) 准备文件&#xff0c;这里我放在resource下的templates路径 在pom中配置构建打包的资源&#xff0c;更新maven 如果使用了assembly打包插件这样配置可能仍不生效&#…

台积电的战略布局:“曲线”抢单 | 百能云芯

郭明錤最新的分析引发了广泛关注&#xff0c;他指出台积电采取了一系列重大战略投资举措&#xff0c;旨在争夺未来的半导体订单&#xff0c;尤其是来自苹果和英伟达的12纳米订单。这些战略举措包括认购英特尔手中的IMS Nanofabrication Global股权以及投资安谋&#xff08;Arm&…

【C++学习笔记】野指针的定义与避免

1.野指针的定义 指向非法的内存地址指针叫作野指针&#xff08;Wild Pointer&#xff09;&#xff0c;也叫悬挂指针&#xff08;Dangling Pointer&#xff09;&#xff0c;意为无法正常使用的指针。 2.出现野指针的常见情形 2.1使用未初始化的指针 出现野指针最典型的情形就…

单个vue echarts页面

<template> <div ref"history" class"echarts"></div> </template> <script> export default{ data () { return {}; }, methods: { history(){ let myChart this.$echarts.init(this.$refs.history); // 绘制图表 myCha…

Linux:基础开发工具之yum,vim,gcc的使用

文章目录 yumvimgcc 本篇主要总结的是Linux下开发工具 yumvimgcc/g yum 什么是yum&#xff1f; 不管是在手机移动端还是pc端&#xff0c;不管是什么操作系统&#xff0c;当用户想要下载一些内容或者工具的时候&#xff0c;都需要到一个特定的位置进行下载&#xff0c;例如在…

点云从入门到精通技术详解100篇-从全局到局部的三维点云细节差异分析

目录 前言 国内外研究现状 细节差异分析相关研究 三维点云的相似性相关研究 存在的问题 三维点云对比的相关技术 2.1 三维点云的采集设备 2.2三维点云的存储格式 2.3三维点云的空间变换 2.4三维点云相似度分析 2.4.1点云特征的提取 2.4.2特征相似度计算 本文篇幅较长&#xff0…

获取Windows 10中的照片(旧版)下载

Windows 10中的新版照片应用&#xff0c;目前发现无法直接打开部分iOS设备上存储的照片。需要使用照片&#xff08;旧版&#xff09;才行。 但目前应用商店中无法直接搜索到照片&#xff08;旧版&#xff09;&#xff0c;因此笔者提供如下链接&#xff0c;可以直接访问并呼出W…

PostgreSQL数据库IPC——SI Message Queue

SI Message Queue代码位于src/backend/storage/ipc/sinvaladt.c和src/backend/storage/ipc/sinval.c文件中&#xff0c;属于PostgreSQL数据库IPC进程间通信的一种方式【之前介绍过PostgreSQL数据库PMsignal——后端进程\Postmaster信号通信也是作为PostgreSQL数据库IPC进程间通…

Ubuntu安装Android Studio

一、Android Studio安装 官方教程&#xff1a;安装 Android Studio | Android Developers 1、下载&#xff1a;Download Android Studio & App Tools - Android Developers&#xff0c;选择linux版本 2、 提取/解压 将下载的安装包提取出来 3、 64位ubuntu系统&#…

vite+react 使用 react-activation 实现缓存页面

对应的版本 "react": "^18.2.0", "react-activation": "^0.12.4", "react-dom": "^18.2.0", "react-router-dom": "^6.15.0",react-activation 这是一个npm包&#xff0c;在react keep alive…

uniapp H5 navigateBack无法返回上一层级

项目场景&#xff1a; 提交表单后需要返回上一级 原因分析&#xff1a; H5在PC端打开&#xff0c;当前页面重新加载的情况下&#xff0c;出现navigateBack不能返回&#xff0c;由于H5端页面刷新后返回页面栈会消失 //提交 const handleSubmit async () > {form.value?.a…