2023-10-07:用go语言,给定n个二维坐标,表示在二维平面的n个点, 坐标为double类型,精度最多小数点后两位, 希望在二维平面上画一个圆,圈住其中的k个点,其他的n-k个点都要在圆外。
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个点都要在圆外。的更多相关文章
- 班上有学生若干名,已知每名学生的成绩(整数),求班上所有学生的平均成绩,保留到小数点后两位。同时输出该平均成绩整数部分四舍五入后的数值。 第一行有一个整数n(1<= n <= 100),表示学生的人数。其后n行每行有1个整数,表示每个学生的成绩,取值在int范围内。
#include<iostream> #include<iomanip> using namespace std ; int main() { int n; while(cin ...
- JAVA如何把一个float四舍五入到小数点后2位,4位,或者其它指定位数.
怎么使float保留两位小数或多位小数 http://meryvn.blog.163.com/blog/static/36962664201173010402629/ 两种方法: import j ...
- Double 数据保留两位小数二:直接截取小数后面两位,不进行四舍五入
package com; public class T2 { public static void main(String[] args) { System.out.println(calculate ...
- MapReduce:输出是一个文本文件,每一行第一个数字式行标,第二个数字是输入文件中每一行除行标外数字的平均值,且整数不保留小数,小数保留两位小数点
有时候你会遇到这样的问题:你有一个表格,给出了每个人在十二月,一月和二月的收入. 表格如下: 姓名 一月 二月 三月 楚乔 200 314 3500 宇文玥 2000 332 ...
- C# 动态创建SQL数据库(二) 在.net core web项目中生成二维码 后台Post/Get 请求接口 方式 WebForm 页面ajax 请求后台页面 方法 实现输入框小数多 自动进位展示,编辑时实际值不变 快速掌握Gif动态图实现代码 C#处理和对接HTTP接口请求
C# 动态创建SQL数据库(二) 使用Entity Framework 创建数据库与表 前面文章有说到使用SQL语句动态创建数据库与数据表,这次直接使用Entriy Framwork 的ORM对象关 ...
- c语言题目:找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点
//题目:找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小.也可能没有鞍点. // #include "stdio.h" #include <stdli ...
- 用JAVA自己画一张二维码
我们都知道,最近2年移动支付在中国堪称新四大发明之一. 二维码无处不在,特别是最近的支付宝扫码领红包,微信,qq,到处在发,阿里有点攻占腾讯移动支付市场的势头啊~博主忽然就对二维码是怎么画的有了点好奇 ...
- Directx11教程(19) 画一个简单的地形
原文:Directx11教程(19) 画一个简单的地形 通常我们在xz平面定义一个二维的网格,然后y的值根据一定的函数计算得到,比如正弦.余弦函数的组合等等,可以得到一个看似不错的地形或者 ...
- C语言二维数组作为函数的参数
前言:今天在实现装配线调度程序时候,用到了二维数组,并将其作为函数的参数.在写程序的时候,遇到一些问题,即二维数组做函数的参数应该如何正确表示.我写程序的错误如下程序所示: #include < ...
- QRCode.js一个生成二维码的javascript库
前言 最近在开发中遇到一个需求:将后端返回的链接转换成二维码,那么如何来实现呢?我们可以使用QRCode.js来解决这一问题 什么是 QRCode.js? QRCode.js 是一个用于生成二维码的 ...
随机推荐
- 通过模仿学会Python爬虫(一):零基础上手
好家伙,爬虫来了 爬虫,这玩意,不会怎么办, 诶,先抄一份作业回来 1.别人的爬虫 Python爬虫史上超详细讲解(零基础入门,老年人都看的懂)_ChenBinBini的博客-CSDN博客 # -* ...
- js如何操作video标签
一.简介 在做web ui自动化时,遇到操作视频的时候有时比较让人头疼,定位时会发现只有一个<video>标签,用selenium来实现的话比较麻烦,使用js后我们只需定位到video标签 ...
- R数据分析:解决科研中的“可重复危机”,理解Rmarkdown
不知道刚接触科研的大伙儿有没有这么一个感觉,别人的研究很大可能你重复不出来,尤其是社科实证研究,到现在我都还觉得所谓的实证是个很玄乎的东西: 如果是刚开始做数据分析,很多时候你会发现自己的分析结果过几 ...
- 如何从AWS中学习如何使用AWS的AmazonDynamoDB存储卷
目录 引言 随着云计算.大数据和人工智能等技术的发展,AWS(亚马逊云)成为了备受瞩目的云计算平台之一.AWS提供了许多先进的云计算服务和功能,包括Amazon DynamoDB(Amazon Dyn ...
- 前端Vue自定义简单通用省市区选择器picker地区选择器picker 收获地址界面模版
前端Vue自定义简单通用省市区选择器picker地区选择器picker 收获地址界面模版,下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin ...
- Eclipse Alt + / 无提示
步骤 一: Widows - Preference - Java - Editor - Content Assist - Advanced 勾选 Java Proposals 二: 在这个位置 点的后 ...
- pod setup 慢 的问题
由于更换了硬盘,重装了系统,需要重新配置环境,发现现在安装cocapods比之前坑更深了, 装环境时遇到pod setup才几kb的下载速度(即使用梯子也是巨慢),实在是没法用在网上尝试了各种方法,但 ...
- 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(10)- 从Serial NAND启动
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MXRT1xxx系列MCU的Serial NAND启动. 最近越来越多的客户在咨询 i.MXRT1xxx 从 Serial N ...
- Spring的依赖注入方式(set及constructor)
Bean的依赖注入方式: set方法注入 P命名空间注入本质也是set方法注入,但比起上面的set方法进行注入更加方便,主要体现在配置文件中,如下: 首先,引入P命名空间: xmlns:p=" ...
- jquery解决跨域问题
在Ajax请求的url不是本地或者同一个服务器下面的URI,最后虽然请求显示为200,但是不会返回任何数据,事实上简单来说请求同一个域名下的url或者说用不带http的绝对路径和相对路径请求是没有任何 ...