2023-10-07:用go语言,给定n个二维坐标,表示在二维平面的n个点,

坐标为double类型,精度最多小数点后两位,

希望在二维平面上画一个圆,圈住其中的k个点,其他的n-k个点都要在圆外。

返回一个圆心和半径,表示哪个圆可以圈住其中的k个点。

坐标和半径都是double类型,最多保留小数点后两位。

下面是正式题目,

给你一个整数数组 arr 和一个整数 k,

现需要从数组中恰好移除 k 个元素。

请找出移除后数组中不同整数的最少数目。

输入:arr = [4,3,1,1,3,3,2], k = 3。

输出:2。

来自美团面试题。

来自左程云

答案2023-10-07:

大体步骤如下:

1.创建一个map m,用于存储数组arr中每个整数出现的次数。

2.遍历数组arr,统计每个整数出现的次数,并保存在map m中。

3.创建一个数组cnts,用于存储map m中的值(即整数出现的次数)。

4.将cnts数组排序,以便移除出现次数少的整数。

5.初始化一个变量i为0,用于记录已移除的整数个数。

6.遍历排序后的cnts数组:

  • 减去当前整数出现的次数k,并将结果保存在变量k中。

  • 如果k小于等于0,说明已经移除了足够的整数,退出循环。

  • 如果k等于0,说明恰好移除了整数的次数,将变量i加1。

7.返回剩下的整数个数,即len(cnts)减去已移除的整数个数i。

总的时间复杂度为O(nlogn),其中n为数组arr的长度,主要消耗在排序cnts数组上。额外空间复杂度为O(n),用于存储map m和数组cnts。

go完整代码如下:

package main

import (
"fmt"
"sort"
) func findLeastNumOfUniqueInts(arr []int, k int) int {
m := make(map[int]int)
for _, num := range arr {
m[num]++
}
cnts := make([]int, 0, len(m))
for _, cnt := range m {
cnts = append(cnts, cnt)
}
sort.Ints(cnts)
i := 0
for ; i < len(cnts); i++ {
k -= cnts[i]
if k <= 0 {
if k == 0 {
i++
}
break
}
}
return len(cnts) - i
} func main() {
arr := []int{4, 3, 1, 1, 3, 3, 2}
k := 3
result := findLeastNumOfUniqueInts(arr, k)
fmt.Println(result)
}

rust完整代码如下:

use std::collections::HashMap;

fn find_least_num_of_unique_ints(arr: Vec<i32>, mut k: i32) -> i32 {
let mut map: HashMap<i32, i32> = HashMap::new();
for num in arr {
let count = map.entry(num).or_insert(0);
*count += 1;
}
let n = map.len();
let mut cnts: Vec<i32> = Vec::with_capacity(n);
for &cnt in map.values() {
cnts.push(cnt);
}
cnts.sort();
let mut i = 0;
for cnt in &cnts {
k -= cnt;
if k <= 0 {
if k == 0 {
i += 1;
}
break;
}
i += 1;
}
(n - i) as i32
} fn main() {
let arr = vec![4, 3, 1, 1, 3, 3, 2];
let k = 3;
let result = find_least_num_of_unique_ints(arr, k);
println!("{}", result);
}

c++完整代码如下:

#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm> int findLeastNumOfUniqueInts(std::vector<int>& arr, int k) {
std::unordered_map<int, int> map;
for (int num : arr) {
map[num]++;
} int n = map.size();
std::vector<int> cnts;
for (auto& pair : map) {
cnts.push_back(pair.second);
}
std::sort(cnts.begin(), cnts.end()); int i = 0;
for (i = 0; i < n; i++) {
k -= cnts[i];
if (k <= 0) {
if (k == 0) {
i++;
}
break;
}
}
return n - i;
} int main() {
std::vector<int> arr = { 4, 3, 1, 1, 3, 3, 2 };
int k = 3;
int result = findLeastNumOfUniqueInts(arr, k);
std::cout << result << std::endl;
return 0;
}

c完整代码如下:

#include <stdio.h>
#include <stdlib.h> typedef struct {
int key;
int value;
} Pair; int compare(const void* a, const void* b) {
return ((Pair*)a)->value - ((Pair*)b)->value;
} int findLeastNumOfUniqueInts(int* arr, int arrSize, int k) {
Pair* map = (Pair*)malloc(arrSize * sizeof(Pair));
int size = 0; for (int i = 0; i < arrSize; i++) {
int key = arr[i];
int found = 0; for (int j = 0; j < size; j++) {
if (map[j].key == key) {
map[j].value++;
found = 1;
break;
}
} if (!found) {
map[size].key = key;
map[size].value = 1;
size++;
}
} qsort(map, size, sizeof(Pair), compare);
int i = 0;
for (; i < size; i++) {
k -= map[i].value;
if (k <= 0) {
if (k == 0) {
i++;
}
break;
}
} free(map); return size - i;
} int main() {
int arr[] = { 4, 3, 1, 1, 3, 3, 2 };
int arrSize = sizeof(arr) / sizeof(arr[0]);
int k = 3;
int result = findLeastNumOfUniqueInts(arr, arrSize, k);
printf("%d\n", result); return 0;
}

2023-10-07:用go语言,给定n个二维坐标,表示在二维平面的n个点, 坐标为double类型,精度最多小数点后两位, 希望在二维平面上画一个圆,圈住其中的k个点,其他的n-k个点都要在圆外。的更多相关文章

  1. 班上有学生若干名,已知每名学生的成绩(整数),求班上所有学生的平均成绩,保留到小数点后两位。同时输出该平均成绩整数部分四舍五入后的数值。 第一行有一个整数n(1<= n <= 100),表示学生的人数。其后n行每行有1个整数,表示每个学生的成绩,取值在int范围内。

    #include<iostream> #include<iomanip> using namespace std ; int main() { int n; while(cin ...

  2. JAVA如何把一个float四舍五入到小数点后2位,4位,或者其它指定位数.

    怎么使float保留两位小数或多位小数 http://meryvn.blog.163.com/blog/static/36962664201173010402629/ 两种方法: import   j ...

  3. Double 数据保留两位小数二:直接截取小数后面两位,不进行四舍五入

    package com; public class T2 { public static void main(String[] args) { System.out.println(calculate ...

  4. MapReduce:输出是一个文本文件,每一行第一个数字式行标,第二个数字是输入文件中每一行除行标外数字的平均值,且整数不保留小数,小数保留两位小数点

    有时候你会遇到这样的问题:你有一个表格,给出了每个人在十二月,一月和二月的收入. 表格如下: 姓名 一月 二月 三月 楚乔     200   314   3500 宇文玥     2000  332 ...

  5. C# 动态创建SQL数据库(二) 在.net core web项目中生成二维码 后台Post/Get 请求接口 方式 WebForm 页面ajax 请求后台页面 方法 实现输入框小数多 自动进位展示,编辑时实际值不变 快速掌握Gif动态图实现代码 C#处理和对接HTTP接口请求

    C# 动态创建SQL数据库(二) 使用Entity Framework  创建数据库与表 前面文章有说到使用SQL语句动态创建数据库与数据表,这次直接使用Entriy Framwork 的ORM对象关 ...

  6. c语言题目:找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点

    //题目:找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小.也可能没有鞍点. // #include "stdio.h" #include <stdli ...

  7. 用JAVA自己画一张二维码

    我们都知道,最近2年移动支付在中国堪称新四大发明之一. 二维码无处不在,特别是最近的支付宝扫码领红包,微信,qq,到处在发,阿里有点攻占腾讯移动支付市场的势头啊~博主忽然就对二维码是怎么画的有了点好奇 ...

  8. Directx11教程(19) 画一个简单的地形

    原文:Directx11教程(19) 画一个简单的地形       通常我们在xz平面定义一个二维的网格,然后y的值根据一定的函数计算得到,比如正弦.余弦函数的组合等等,可以得到一个看似不错的地形或者 ...

  9. C语言二维数组作为函数的参数

    前言:今天在实现装配线调度程序时候,用到了二维数组,并将其作为函数的参数.在写程序的时候,遇到一些问题,即二维数组做函数的参数应该如何正确表示.我写程序的错误如下程序所示: #include < ...

  10. QRCode.js一个生成二维码的javascript库

    前言 最近在开发中遇到一个需求:将后端返回的链接转换成二维码,那么如何来实现呢?我们可以使用QRCode.js来解决这一问题 什么是 QRCode.js? QRCode.js 是一个用于生成二维码的 ...

随机推荐

  1. [ARM汇编]计算机原理与数制基础—1.1.2 二进制与十进制数制转换

    在计算机中,我们通常使用二进制数制来表示数据,因为计算机的基本电平只有两种状态:高电平(通常表示为 1)和低电平(通常表示为 0).而在我们的日常生活中,我们习惯使用十进制数制.为了方便理解,我们需要 ...

  2. 一分钟学一个 Linux 命令 - ps

    前言 大家好,我是 god23bin.欢迎来到<一分钟学一个 Linux 命令>系列,每天只需一分钟,记住一个 Linux 命令不成问题.今天要说的是 ps 命令. 什么是 ps 命令? ...

  3. ShardingSphere5入门到实战

    ShardingSphere5入门到实战 第01章 高性能架构模式 互联网业务兴起之后,海量用户加上海量数据的特点,单个数据库服务器已经难以满足业务需要,必须考虑数据库集群的方式来提升性能.高性能数据 ...

  4. APP中Web容器的核心实现

      现在的业务型APP中,采用纯原生开发策略的已经很少了,大部分都使用的混合开发.如原生,H5,ReactNative,Flutter,Weex它们之间任意的组合就构成了混合开发. 其中原生+H5是出 ...

  5. ASL单芯片CS5366TypeC转HDMI4K60HZ加HUB多口方案|CS5366带PD拓展方案原理图

    CS5366芯片是ASL集睿致远最新推出的2Len带PD的扩展坞方案芯片,CS5366支持4K60HZ. 在分辨率4K下,刷新率60HZ对于30HZ看似提升不多,但是对于应用在游戏主座的客户来说至关重 ...

  6. Python开发者必读:Pip使用全攻略与最佳实践

    在这篇文章中,我们将深入探讨Python的主要包管理工具--Pip.内容涵盖了Pip的基本概念.安装和配置.中国国内镜像源的使用.包管理.与虚拟环境的关系.高级用法.问题解决. 1. 引言 在现代的软 ...

  7. 我学到的一下vue使用技巧

    这两天学到的vue使用技巧 v-if , 当封装组件的时候,用到的props,最外层最好加个v-if,防止出现cannot read property of undefined 这样的错误,如果pro ...

  8. MySQL的索引详解

    在MySQL中,常见的索引类型有以下几种: B-Tree索引: B-Tree(Balanced Tree)索引是MySQL中最常见的索引类型.它基于B-Tree数据结构,适用于等值查询.范围查询和排序 ...

  9. Cilium系列-13-启用XDP加速及Cilium性能调优总结

    系列文章 Cilium 系列文章 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, ...

  10. [nginx]日志中记录自定义请求头

    前言 假设在请求中自定义了一个请求头,key为"version",参数值为"1.2.3",需要在日志中捕获这个请求头. nginx日志配置 只需要用变量http ...