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

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

时间:2023-10-07 15:22:04浏览次数:32  
标签:map arr 个点 int ++ 二维 cnts 坐标

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;
}

在这里插入图片描述

标签:map,arr,个点,int,++,二维,cnts,坐标
From: https://www.cnblogs.com/moonfdd/p/17746390.html

相关文章

  • c语言 二维数组指针
    @TOC前言前面我们讲了一维数组指针,今天我们讲一下二维数组指针。一、二维数组指针的定义:概述:二维数组指针的定义就是把一维数组换成二维数组。二维数组的各个元素也都是地址。步骤:inta[2][3]={{1,2,3},{4,5,6}};//定义一个二维数组int(*p)[2][3]=&a;//a是整......
  • 三角形重心坐标系
    因为P=iA+jB+kC因此从中我们就可以取得两个方程式:......
  • 001二次函数顶点坐标公式怎么求
    (1)二次函数的定义式和图像一般地,把等号右边自变量的最高次数是2的函数叫做二次函数,其表达式有三种:1、一般式:f(x)=ax²+bx+c(a、b、c是常数),x为自变量,其中a称为二次项系数,b为一次项系数,c为常数项。二次函数的图像是开口向上或者向下的抛物线,二次项系数a决定二次函数图像的开......
  • 2023-10-04:用go语言,现有一棵无向、无根的树,树中有 n 个节点,按从 0 到 n - 1 编号 给你
    2023-10-04:用go语言,现有一棵无向、无根的树,树中有n个节点,按从0到n-1编号给你一个整数n和一个长度为n-1的二维整数数组edges,其中edges[i]=[ai,bi]表示树中节点ai和bi之间存在一条边。每个节点都关联一个价格。给你一个整数数组price,其中price[i]是第i......
  • 2023-10-04:用go语言,现有一棵无向、无根的树,树中有 n 个节点,按从 0 到 n - 1 编号 给你
    2023-10-04:用go语言,现有一棵无向、无根的树,树中有n个节点,按从0到n-1编号给你一个整数n和一个长度为n-1的二维整数数组edges,其中edges[i]=[ai,bi]表示树中节点ai和bi之间存在一条边。每个节点都关联一个价格。给你一个整数数组price,其中price[i]是......
  • 02-JZ4 二维数组中的查找
    我的想法:暴力:按行遍历,比较---O(m*n)折半:行折半查找;有n行,折半n次----O(nlgn)问题:不满足时间复杂度O(m+n)正确思路:左下角开始比较arr[i][0]>target--往小找,往上走,i--;arr[i][0]<target--往大找,往右走,j++;arr[i][0]==target,即找到循环截至条件,超出数组边界适用场景:迷宫......
  • 【matplotlib 实战】--平行坐标系
    平行坐标系是一种统计图表,它包含多个垂直平行的坐标轴,每个轴表示一个字段,并用刻度标明范围。通过在每个轴上找到数据点的落点,并将它们连接起来形成折线,可以很容易地展示多维数据。随着数据增多,折线会堆叠,分析者可以从中发现数据的特性和规律,比如发现数据之间的聚类关系。尽管平行......
  • 3.Maven基础概念-坐标
    1.maven仓库地址https://repo1.maven.org/maven2/https://mvnrepository.com/2.什么是坐标Maven中坐标用户描述仓库中资源的位置3.maven坐标主要组成groupld:定义当前Maven项目隶属组织名称(通常是域名反写,例如:orgmybatis)artifactld:定义当前Maven项目名称(通常是模块名称......
  • 古诗词网登录之二维码的处理
    importrequestsfromlxmlimportetreeimporturllib.requesturl='https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)App......
  • [vue]在鼠标点击处,画点,并弹窗显示两个点的距离
    <template><divclass="sandbox"><divclass="road"@click="handleClick($event)"><divv-for="(point,pointIndex)inmarkPoints":key="pointIndex......