首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

逆序对!

今天继续来学习《剑指Offer》系列的一道经典题目:数组中的逆序对,依旧给出了非常详细的题解和精美的配图与动画。...一、题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。...而在第二步解决的过程中,不断的通过比较的方式合并两个排序数组,在这个操作中,如果遇到 左子数组当前元素 > 右子数组当前元素,意味着 「左子数组当前元素 至 末尾元素」 与 「右子数组当前元素」 构成了若干 「逆序对...比如 4 与 2 进行比较,4 > 2,它们是一组逆序对,又因为黄色区域从左到右是递增的,那也就意味着从 start1 到 end1 所有的元素都大于了 2,都和 2 构成了逆序对。...所以,我们只需要在归并排序的代码上添加一行统计逆序对的代码就行。

50830

单链表逆序

2、 单链表逆序 第二个题目是很经典的“单链表逆序”问题。...如何在不使用额外存储节点的情况下使一个单链表的所有节点逆序?我们先用迭代循环的思想来分析这个问题,链表的初始状态如图(1)所示: ?...图(4)经过第三次迭代后的状态 此时可以看出,在图(4)的基础上再进行一次迭代就可以完成链表的逆序,因此循环迭代的终止条件就是当前的head指针是NULL。...()对问题进行求解,将链表分为当前表头节点和其余节点,递归的思想就是,先将当前的表头节点从链表中拆出来,然后对剩余的节点进行逆序,最后将当前的表头节点连接到新链表的尾部。...图(5)第一次递归状态图 这里边的关键点是头节点head的下一个节点head->next将是逆序后的新链表的尾节点,也就是说,被摘除的头接点head需要被连接到head->next才能完成整个链表的逆序

71730

链表分组逆序

链表分组逆序是一个常见的操作,用于将链表按照一定规则分组后,逆序每个分组。这种操作常常用于解决链表中的某些问题。...下面介绍几种常见的用于链表分组逆序的算法,并分析它们的优劣势: 迭代法 •算法描述:迭代法是一种直观的方法。...它维护一个虚拟头节点,然后按照指定的组数 k,逐一遍历链表,将每组的节点逆序,然后将前一组的尾部节点与当前组的头部节点相连接。•优点:相对容易理解和实现,不需要额外的空间。...prev prev = current current = next } return prev } 递归法 •算法描述:递归法通过递归地处理每一组,将其逆序...= nil { count++ current = current.Next } // 若链表长度小于 k,则无需逆序 if count < k

11020

案例:数组的逆序

在讲解数组的逆序之前,我们需要了解这么一个需求,就是如何完成数组元素的交换。...好了那么现在我们要做的是这么一件事,将一个数组中的所有元素完成逆序,注意并不是逆序打印,而是真正做到将数组中的所有元素翻转一下。...那么应该怎么做 假设我们现在有一个数组 ,里面有5个元素{1,2,3,4,5},我们要做一个逆序,其实就是得到一个新的数组{5,4,3,2,1};通过对比可以发现,我们只需要将第一个元素...所以我们其实可以找到一个规律,就是任意一个元素要想实现逆序,需要交换的次数是 arr.length/2 次。这其实也是我们写的循环语句需要执行的次数。...arr[i] = arr[arr.length-1-i]; arr[arr.lentgh-1-i] = temp; } 对于数组的逆序

30920
领券