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. Dubbo负载均衡策略之 一致性哈希

    本文主要讲解了一致性哈希算法的原理以及其存在的数据倾斜的问题,然后引出解决数据倾斜问题的方法,最后分析一致性哈希算法在Dubbo中的使用.通过这篇文章,可以了解到一致性哈希算法的原理以及这种算法存在的 ...

  2. Lifecycle解决了什么问题,以及它的基本用法

    1.为何要引入Lifecycle? 我首先来举个大家都比较常见的例子:我们在android开发的时候,经常需要在页面的onCreate()方法中对组件进行初始化,在onPause()方法中停止组件,而 ...

  3. java根据配置文件读取值

    <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --> <dependency> ...

  4. AI 时代的视频云转码移动端化——更快、更好、更低、更广

    编者按: AI技术的落地是渐渐地从服务器端.云端落地,逐步到移动端及边缘设备上.这些年随着AI技术的进步,轻量级算法模型开始在移动端实时跑起来,并且移动端算法也在不断进行迭代和完善,而对于实时直播场景 ...

  5. Java生成图片(简版)

    1.图片模板示例 2.Java代码(简版) public static void main(String[] args) throws FileNotFoundException, IOExcepti ...

  6. Java并发篇:6个必备的Java并发面试种子题目

    线程创建和生命周期 线程的创建和生命周期涉及到线程的产生.执行和结束过程.让我们继续深入探索这个主题: 线程的创建方式有多种,你可以选择适合你场景的方式: 继承Thread类: 创建一个类,继承自Th ...

  7. Linux 命令:diff

    用途 示例 备注 查看区别 diff file_1 file_2 不加选项 并排输出 diff file_1 file_2 -y -W 50 类似vimdiff 生成patch diff -ruN f ...

  8. Notepad正则表达式用法

    https://blog.csdn.net/cuckoo1/article/details/52165449

  9. 基于Go编写一个可视化Navicat本地密码解析器

    前提 开发小组在测试环境基于docker构建和迁移一个MySQL8.x实例,过程中大意没有记录对应的用户密码,然后发现某开发同事本地Navicat记录了根用户,于是搜索是否能够反解析Navicat中的 ...

  10. 【Leaflet专题篇】L.tileLayer图层顺序问题

    1 问题复现 使用L.tileLayer加载底图(A.B.C)并使用layerControl管理.在用L.tileLayer.wms添加wms服务(D),当切换ABC时会压盖D视频中右下角的wms服务 ...