不同整数的最少数目和单词直接最短距离

2024-01-16 07:52

本文主要是介绍不同整数的最少数目和单词直接最短距离,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写是为了更好的思考,坚持写作,力争更好的思考。
今天分享两个关于“最小、最短”的算法题,废话少说,show me your code!

一、不同整数的最少数目

给你一个整数数组arr和一个整数k。现需要从数组中恰好移除k个元素,请找出移除后数组中不同整数的最少数目?
输入:
arr=[5,4,5],k=1
输出:1
解释:
移除1个4,数组中只剩下5一种整数
输入:
arr=[4,3,1,1,3,3,2],k=3
输出:2 解释:先移除4,2然后再移除两个1中任意1个1或者移除两个3中的任意1个3,最后剩余1和3两种整数类型

public static int getMinDifference(int[] arr, int k) {// key存放数组数字,value存放次数Map<Integer, Integer> map = new HashMap<>();for (int i : arr) {map.put(i, map.getOrDefault(i, 0) + 1);}// 对次数按照自然顺序排序即由小到大List<Integer> countNumList = map.values().stream().sorted().collect(Collectors.toList());// 不同种类组成的list的长度int size = countNumList.size();for (Integer count : countNumList) {// 由于countNumList由小到大有序,则每次从左边开始剔除数字,使得最终种类最少// 遍历countNumList,如果k>=当前次数,则直接删除,种类减少1即size--if (k >= count) {k -= count;size--;} else {// 如果k<当前次数,则删除当前次数1次后,总的种类并无变化,所以直接终止for循环,// 不用再继续判断下一个数字了(因为countNumList有序)break;}}return size;}

二、单词直接最短距离

给定一个单词列表arr和word1,word2,求出这两个单词之间的最短距离word1,word2不相等且均在arr列表中

public static int getMinDistance(String[] arr, String word1, String word2) {// 在for循环外定义2个变量,用于存储word1,word2的索引下标,注意要用-1表示,否则会计算出错// 将两者索引下标之差的绝对值进行比较,取最小值(注意pos1和pos2均不为空)int pos1 = -1;int pos2 = -1;int minDistance = Integer.MAX_VALUE;for (int i = 0; i < arr.length; i++) {if (word1.equals(arr[i])) {pos1 = i;} else if (word2.equals(arr[i])) {pos2 = i;}if (pos1 >= 0 && pos2 >= 0) {minDistance = Math.min(minDistance, Math.abs(pos1 - pos2));}}return minDistance;}

这篇关于不同整数的最少数目和单词直接最短距离的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/611822

相关文章

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

hdu1496(用hash思想统计数目)

作为一个刚学hash的孩子,感觉这道题目很不错,灵活的运用的数组的下标。 解题步骤:如果用常规方法解,那么时间复杂度为O(n^4),肯定会超时,然后参考了网上的解题方法,将等式分成两个部分,a*x1^2+b*x2^2和c*x3^2+d*x4^2, 各自作为数组的下标,如果两部分相加为0,则满足等式; 代码如下: #include<iostream>#include<algorithm

2. c#从不同cs的文件调用函数

1.文件目录如下: 2. Program.cs文件的主函数如下 using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using System.Windows.Forms;namespace datasAnalysis{internal static

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

uva 10061 How many zero's and how many digits ?(不同进制阶乘末尾几个0)+poj 1401

题意是求在base进制下的 n!的结果有几位数,末尾有几个0。 想起刚开始的时候做的一道10进制下的n阶乘末尾有几个零,以及之前有做过的一道n阶乘的位数。 当时都是在10进制下的。 10进制下的做法是: 1. n阶位数:直接 lg(n!)就是得数的位数。 2. n阶末尾0的个数:由于2 * 5 将会在得数中以0的形式存在,所以计算2或者计算5,由于因子中出现5必然出现2,所以直接一

PTA求一批整数中出现最多的个位数字

作者 徐镜春 单位 浙江大学 给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。 输入格式: 输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。 输出格式: 在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

MyBatis 切换不同的类型数据库方案

下属案例例当前结合SpringBoot 配置进行讲解。 背景: 实现一个工程里面在部署阶段支持切换不同类型数据库支持。 方案一 数据源配置 关键代码(是什么数据库,该怎么配就怎么配) spring:datasource:name: test# 使用druid数据源type: com.alibaba.druid.pool.DruidDataSource# @需要修改 数据库连接及驱动u

每日一练7:简写单词(含链接)

1.链接 简写单词_牛客题霸_牛客网 2.题目 3.代码1(错误经验) #include <iostream>#include <string>using namespace std;int main() {string s;string ret;int count = 0;while(cin >> s)for(auto a : s){if(count == 0){if( a <=