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

邹城建网站初学网站开发需要书籍

邹城建网站,初学网站开发需要书籍,江苏建站管理系统开发,在线协同办公软件问题描述 给定一个无序整数数组&#xff0c;将其排列成波浪形数组。若数组 arr[0..n-1] 满足以下条件&#xff0c;则称为波浪形&#xff1a; arr[0] > arr[1] < arr[2] > arr[3] < arr[4] > ... 或 arr[0] < arr[1] > arr[2] < arr[3] > arr[4] &l…

问题描述

给定一个无序整数数组,将其排列成波浪形数组。若数组 arr[0..n-1] 满足以下条件,则称为波浪形:
arr[0] >= arr[1] <= arr[2] >= arr[3] <= arr[4] >= ...

arr[0] <= arr[1] >= arr[2] <= arr[3] >= arr[4] <= ...

输入输出示例

示例 1

  • 输入: arr[] = {10, 5, 6, 3, 2, 20, 100, 80}
  • 输出: arr[] = {10, 5, 6, 2, 20, 3, 100, 80}
  • 解释:
    输出数组满足 10 >= 5 <= 6 >= 2 <= 20 >= 3 <= 100 >= 80 的波浪形式。
    波浪形允许两种交替模式(大-小或小-大交替),只要保持上下交替即可。

示例 2

  • 输入: arr[] = {20, 10, 8, 6, 4, 2}
  • 输出: arr[] = {20, 8, 10, 4, 6, 2}
  • 解释:
    输出数组满足 20 >= 8 <= 10 >= 4 <= 6 >= 2 的波浪形式。

关键要求

  1. 交替规则:相邻元素必须满足 >= 和 <= 交替出现。
  2. 多解性:可能存在多个有效答案(如示例 1 的另一种解为 {5, 10, 2, 6, 3, 20, 80, 100})。
  3. 局部调整:无需全局排序,只需保证局部交替关系。

算法思路(附加说明)

方法 1:排序后交换相邻元素

  • 步骤:
    1. 先对数组升序排序。
    2. 遍历数组,每两个相邻元素交换一次。
  • 复杂度:
    • 时间复杂度:O(n log n)(排序耗时)。
    • 空间复杂度:O(1)(原地操作)。

方法 2:单次遍历调整(推荐)

  • 核心思想:
    确保所有偶数位置元素大于等于其相邻元素,即可自动满足波浪条件。
  • 步骤:
    1. 遍历所有偶数索引位置(i = 0, 2, 4, ...)。
    2. 对每个位置 i:
      • 若 arr[i-1] > arr[i](且 i > 0),交换它们。
      • 若 arr[i+1] > arr[i](且 i < n-1),交换它们。
  • 复杂度:
    • 时间复杂度:O(n)(单次遍历)。
    • 空间复杂度:O(1)(原地操作)。

Java实现

/*** 将无序数组排列成"波浪形"数组:* 满足 arr[0] >= arr[1] <= arr[2] >= arr[3]...* 或 arr[0] <= arr[1] >= arr[2] <= arr[3]...*/public class WaveArraySorter {/*** 交换数组中两个元素的位置* @param arr 目标数组* @param i 第一个元素的索引* @param j 第二个元素的索引*/private static void swap(int[] arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}/*** O(n)时间复杂度实现波浪排序的核心算法* 关键思想:确保所有偶数索引元素都大于相邻元素*/public static void sortWave(int[] arr) {// 遍历所有偶数索引位置(0,2,4...)for (int i = 0; i < arr.length; i += 2) {           // 如果前一个元素更大,交换它们if (i > 0 && arr[i-1] > arr[i]) {swap(arr, i-1, i);}// 如果后一个元素更大,交换它们if (i < arr.length-1 && arr[i+1] > arr[i]) {swap(arr, i, i+1);}}}public static void main(String[] args) {// 测试用例1int[] arr1 = {10, 5, 6, 3, 2, 20, 100, 80};System.out.println("原始数组1:" + Arrays.toString(arr1));sortWave(arr1);System.out.println("波浪排序1:" + Arrays.toString(arr1));// 测试用例2int[] arr2 = {20, 10, 8, 6, 4, 2};System.out.println("\n原始数组2:" + Arrays.toString(arr2));sortWave(arr2);System.out.println("波浪排序2:" + Arrays.toString(arr2));}
}

http://www.dtcms.com/a/531113.html

相关文章:

  • 建设银行客户投诉网站淮安做网站建设的网络公司
  • 网站后台管理系统如何安装自在源码网官网
  • 导航网站模板免费ftp服务器租用
  • 医院门户网站建设方案用户体验差有哪些网站
  • 重庆品牌网站建设江门市住房和城乡建设部网站
  • 网站构建工具网站怎么做更好推广
  • 还能做网站的分类做网站 套用模板之后用什么改
  • 网站设计 psd用php做图书管理网站
  • 做网站什么是三网合一网站源码怎么写
  • 大型电子商务网站建设公司哪家公司建5g基站
  • 网站建设策划书ppt免费的设计软件有哪些
  • 重庆永川网站建设价格wordpress 访问控制
  • 安徽专业网站建设检修温州网站建设托管
  • 免费做那个的视频网站凡客家居怎么样
  • 如何高效率的建设网站白云区住房和建设水务局网站
  • 网站建设在哪里找客户淮南企业网站建设
  • 网站设计培训成都哪家好互动性的网站
  • 模板网站开发注意事项做公司
  • 天商阳光网站邮箱wordpress标签页样式
  • 高水平的郑州网站建设网上购物商城有哪些
  • 成都seo整站做公司网站要钱吗
  • 网站备案查询什么是短视频营销
  • 如何建购物网站免费开源代码网站
  • 衡水网站建设网络公司网站建设原则应考虑哪些方面
  • 湛江网站建设服务微网站开发平台wizi
  • 江苏建筑网站建设手机可以开发网站
  • 电子商务网站建设的难点贵州建设职业技术学院报名网站
  • 网站外链如何建设最有用怎么做类似清风dj网站
  • c2c商城网站建设二次开发品牌建设岗位职责
  • 合肥专业做淘宝网站偃师网站