搜狗2016校园招聘之编程题解析-大数据开发

解题思路

  1. 使用JDK中的Point2D类,该类定义了坐标系空间中的一个点
  2. Point2D是一个抽象类,但是在该类内部定义了静态的Double类,并且Double继承自Point2D
  3. 可以通过Double的构造方法来实例化空间中的某个点
  4. 将所有的输入数据全部实例化并存放在一个Point2D.Double的数组中
  5. 对该数组进行暴力破解,计算其中任意两个点之间的距离,时间复杂度为O(n2),并保留下最小的两个点的编号,且编号小的在前

Java算法实现

import java.awt.geom.Point2D;
import java.util.Scanner;
/*** Description:* 测试数据* 3* 1.0 1.0002* 3.03 3.023* 0.0 -0.001* Closest points: 0, 2* Process finished with exit code 0* **/
public class Main {static int[] getClosest(Point2D.Double[] points) {int[] result = new int[2];double distance = Double.MAX_VALUE;for (int i = 0; i < points.length; i++) {for (int j = i + 1; j < points.length; j++) {if (i != j) {double distance1 = points[i].distance(points[j]);if (distance1 < distance) {distance = distance1;if (i < j) {result[0] = i;result[1] = j;} else {result[0] = j;result[i] = i;}}}}}return result;}public static void main(String[] args) {Point2D.Double[] points;Scanner input = new Scanner(System.in);{int n = input.nextInt();input.nextLine();points = new Point2D.Double[n];for (int i = 0; i < n; ++i) {double x = input.nextDouble();double y = input.nextDouble();input.nextLine();points[i] = new Point2D.Double(x, y);}}int[] result = getClosest(points);System.out.printf("Closest points: %d, %d\n", result[0], result[1]);}
}

解题思路

  1. 利用伪随机特性,只要时间种子一样且上限一样,其实随机数每次都会产生相同的数
  2. 既然要求还原,那么我们从后往前执行对应的操作即可
  3. 使用一个额外的栈来存储所产生的随机数
  4. 在乱序操作中,是将随机数对应的元素与最后一个元素进行交换,那么还原的时候,就要从第一个元素开始与最后产生的那个随机数对应的元素进行交换,依次类推,直到栈空即可

Java算法实现

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
import java.util.Stack;/*** ClassName:Main* Description:输入数据* 12312 3 1 2 3* Success!*/public class Main {static Stack<Integer> s = new Stack<Integer>();static void shuffle(int a[], int seed) {int n = a.length;Random random = new Random(seed);for (; n > 1; n--) {int r = random.nextInt(n);int tmp = a[n - 1];a[n - 1] = a[r];a[r] = tmp;}}static void restore(int a[], int seed) {int n = a.length;Random random = new Random(seed);int temp = n;for (; temp > 1; temp--) {int r = random.nextInt(temp);s.add(r);}for (int i = 0; i < n; i++) {if (!s.isEmpty()) {int r = s.pop();int tmp = a[i + 1];a[i + 1] = a[r];a[r] = tmp;}}}public static void main(String[] args) {int seed, n, i;int[] a, b;Scanner input = new Scanner(System.in);{seed = input.nextInt();n = input.nextInt();a = new int[n];for (i = 0; i < n; ++i)a[i] = input.nextInt();}b = Arrays.copyOf(a, a.length);shuffle(a, seed);restore(a, seed);for (i = 0; i < n; i++) {if (a[i] != b[i])break;}if (i == n)System.out.printf("Success!\n");elseSystem.out.printf("Failed!\n");}
}

仅供参考!!!

搜狗2016校园招聘之编程题解析-大数据开发相关推荐

  1. 搜狗2012校园招聘自测题

    搜狗2012年校园招聘的在线自测题,每人只有三次机会,每次的内容不同,但是原理一致,其实就是根据一段字符串的加密写出解密算法,分析出原文内容,下为Java代码: public class Test { ...

  2. 搜狗2016年校招笔试编程题记录+总结

    不同的职位题目应该不一样,我遇到的2道题,其一是搜狗问答中的作弊判断,其二是矩阵计算. 1. 搜狗问答作弊判断 简单来说,就是存在作弊刷积分的情况,所以需要判断哪些人作弊,判断遵循下面2个原则: (A ...

  3. 奇虎360_2017校园招聘笔试编程题第一题

    今晚做了360的校招笔试题,编程题难度适中,在这里跟大家分享一下编程题的第一题. 1. 题目 2. 输入输出及样例 3. 我的思路 这题应该看题目理解一下就有思路,最简单粗暴的就是创建一个二维数组in ...

  4. 奇虎360_2017校园招聘笔试编程题第二题

    今晚做了360的校招笔试题,编程题难度适中,在这里跟大家分享一下编程题的第二题.第二道题也不难想到思路,但是如果写法不当,可能无法满足题目的时间限制. 1. 题目 2. 输入输出及样例 3. 我的思路 ...

  5. 魔法王国java_网易2018校园招聘面试编程题真题与参考答案集合

    [编程题] 魔法币 小易准备去魔法王国采购魔法神器,购买魔法神器需要使用魔法币,但是小易现在一枚魔法币都没有,但是小易有两台魔法机器可以通过投入x(x可以为0)个魔法币产生更多的魔法币. 魔法机器1: ...

  6. 哈罗python的学费多少-哈啰出行招聘Java、算法、大数据开发、安卓、iOS、运维架构专家/高级专家等...

    简历请发hanlongjie05932@hellobike.com 资深IOS开发工程师 工作职责: 1.负责IOS平台应用产品的研发工作: 2.负责根据产品需求完成模块设计.编码.编码集成工作: 3 ...

  7. 搜狗2016校园招聘之算法编程解析

    1.第一个题:最近邻居 题目: 解题思路: 1)这个题如果用java,相对会好解一些,因为可以直接用JDK中的Point2D类,来定义坐标系空间中的一个点. 2)简单思路:暴力破解,计算任意两个点之间 ...

  8. 腾讯2021校园招聘技术类编程题汇总

    第一题 代码: '''author: 'Qingmang'data: "2022/9/8 16:26"email: "1107438760@qq.com" '' ...

  9. 奇虎360 2015校园招聘笔试编程题

    题目一: 写一个函数,根据两文件的绝对路径算出相对路径. 如a="/qihoo/app/a/b/c/d/new.c",b="/qihoo/app/1/2/test.c&q ...

最新文章

  1. C++之全局对象、局部对象、静态对象详解
  2. spring中事务控制的一组API
  3. opencv图像前景目标提取
  4. 9.获取当前时区时间和utc时间的工具方法
  5. brew报错:in `initialize‘: Version value must be a string; got a NilClass () (TypeError)
  6. httpservletrequest_HttpServletResponse和HttpServletRequest取值的2个坑你知道吗?
  7. Performance --- 前端性能监控
  8. sql 差值_SQL_LeetCode的连续性题目
  9. 《程序员代码面试指南》第一章:栈与队列
  10. 单片机外文参考文献期刊_求有关单片机的中英文参考文献
  11. idea谷歌翻译插件translation失效问题(可行)
  12. Ubuntu18.04 (WSL) 编译RK3399 Android8.1源码
  13. 12x12怎么速算_12x12怎么速算_12x12怎样巧算
  14. Java编程:将具有父子关系的数据库表数据转换为树形结构,支持无限层级
  15. 序列化(serialization)。
  16. Houdini 导出.ass文件
  17. (四)国产数据库-达梦DCA实操(创建用户、权限)
  18. verilog学习:一个简单的入门verilog例子
  19. Linux strace、pstack 命令 使用详解
  20. Chrome64位安装包下载

热门文章

  1. tcpdump 命令使用教程
  2. tcpdump命令使用
  3. java实现快速排序以及快速排序的原理
  4. 台式计算机排行榜2018,cpu天梯图2018最新版 2018电脑cpu处理器性能排行榜
  5. python2.7交通标志识别图_利用图像处理技术识别道路交通标志牌
  6. MYSQL刷题题解_上升的温度
  7. 拼多多无货源开店怎么样?
  8. 官宣 | TDengine物联网大数据平台正式开源
  9. python 视频下载神器(you-get) 的安装和用法
  10. Darknet在ubuntu下的安装