当前位置: 首页 > news >正文

随机题两题

逆序对

题目

给定一个数组,求其中有多少逆序对,要求时间复杂度不超过nlogn。

思路

  • 使用归并排序的分治思想,将数组递归地分为左右两部分。
  • 在合并两个有序子数组时,若左侧数组中的某个数大于右侧数组中的某个数,则可以确定该左侧数组中的这个数和右侧数组中当前及其后的所有元素形成逆序对。
  • 递归合并的过程中,统计所有逆序对的数量。

代码

 private static int countInversions(int[] num) {int left = 0, right = num.length - 1;int[] temp = new int[num.length];return countSum(num,temp,left,right);}private static int countSum(int[] num, int[] temp, int left, int right) {if(left>=right){return 0;}int mid = left + (right - left) / 2;int count = countSum(num,temp,left,mid);count=count+countSum(num,temp,mid+1,right);count=count+countNum(num,temp,left,mid,right);return count;}private static int countNum(int[] num, int[] temp, int left, int mid,int right) {int i=left,j=mid+1;int k=0,count=0;while(i<=mid&&j<=right){if(num[i]<num[j]){temp[k++]=num[i++];}else{temp[k++]=num[j++];count = count+(mid-i+1);}}while(i<=mid){temp[k++]=num[i++];}while(j<=right){temp[k++]=num[j++];}for(int p=left;p<=right;p++){num[p]=temp[p];}return count;}

均衡

题目

这是一个通过移动数组元素值实现尽量“均衡”的问题。目标是使数组中元素尽量相等,或者趋于相同的范围。每次只能移动 1 单位,只能移动相邻的数组。

例如数组【1,4,6】,下标为1的数组元素4,可以移动移动一单位给1或者6,将数组变为【2,3,6】或者【1,3,7】。

要求数组达到【3,4,4】,数组顺序不限。

思路

直接一个模拟

  1. 不断调整相邻的元素,逐步趋近于配平。
  2. 打印每次移动的过程,直到达到平衡或接近平衡。

代码

public static void balanceArray(int[] arr) {int moves = 0;int n = arr.length;while (!isBalanced(arr)) {for (int i = 0; i < n - 1; i++) {if (arr[i] < arr[i + 1]) {arr[i]++;arr[i + 1]--;moves++;printArray(arr, moves);}else if (arr[i] > arr[i + 1]) {arr[i]--;arr[i + 1]++;moves++;printArray(arr, moves);}}}System.out.println("Total moves: " + moves);}private static boolean isBalanced(int[] arr) {int total = Arrays.stream(arr).sum();int remainder = total % arr.length;int first = arr[0];for (int i = 1; i < arr.length; i++) {if (arr[i] != first&&Math.abs(first-arr[i])>remainder) {return false;}}return true;}private static void printArray(int[] arr, int step) {System.out.println("Step " + step + ": " + Arrays.toString(arr));}

http://www.lryc.cn/news/468116.html

相关文章:

  • 信息安全工程师(69)数字水印技术与应用
  • 知识点框架笔记3.0笔记
  • Android组件化开发
  • centos-LAMP搭建与配置(论坛网站)
  • Python 实现日期计算与日历格式化输出
  • npm install 安装很慢怎么办?
  • 【WRF数据处理】基于GIS4WRF插件将geotiff数据转为tiff(geogrid,WPS所需数据)
  • python+大数据+基于Hadoop的个性化图书推荐系统【内含源码+文档+部署教程】
  • 修改huggingface的缓存目录以及镜像源
  • 散列表:如何解决哈希表装载因子过高导致的性能下降问题?
  • Vue Router进阶学习
  • Linux巡检利器xsos的安装和使用
  • Django+Vue项目搭建
  • 【NLP自然语言处理】Attention机制原理揭秘:赋予神经网络‘聚焦’与‘理解’的神奇力量
  • PHP依赖注入的原理
  • 文本相似度方案
  • appium 的工作原理
  • ECharts饼图-富文本标签,附视频讲解与代码下载
  • 关于在windows10系统64位安装luasocket问题
  • 模型拆解(二):GeleNet
  • RTE 2024 隐藏攻略
  • django 部署服务器后 CSS 样式丢失的问题
  • 基于springboot的网上服装商城推荐系统的设计与实现
  • 盘古信息IMS系统助力制造企业释放新质生产力
  • ArcGIS 10.8 安装教程
  • Redis学习笔记(二)--Redis的安装与配置
  • 软件工程之软件系统设计与软件开发方法
  • pip命令行安装pytest 一直报错
  • 如何在Debian操作系统上安装Doker
  • 代码随想录刷题学习日记