数组差的绝对值

Given two arrays A, B with size n, you could justify the positions of number in array B to maximum the sum[abs(ai-bi)], i from 0 to n or minimize the sum[abs(ai-bi)].

---------------------------------------------------------------------

Maximum: sort all numbers in A and B, Use the last n numbers to minus the first n numbers.

Minimum: sort A and B separately. Use proof by contradiction:

Image Ai < Aj and Bi > Bj, discuss the6 situations:

Ai < Aj < Bi < Bj

Ai < Bi< Aj < Bj

Ai < Bi < Bj< Aj

Bi < Ai < Aj < Bj

Bi < Ai < Bj < Aj

Bi < Bj < Ai < Aj

In all of the situations , |Ai-Bi|+|Aj-Bj| <= |Ai-Bj|+|Aj-Bi|

时间: 2024-10-10 11:30:42

数组差的绝对值的相关文章

有这样一个数组A,大小为n,相邻元素差的绝对值都是1。

有这样一个数组A,大小为n,相邻元素差的绝对值都是1.如:A={4,5,6,5,6,7,8,9,10,9}.现在,给定A和目标整数t,请找到t在A中的位置.除了依次遍历,还有更好的方法么? 思路:数组第一个数为array[0], 要找的数为y,设t = abs(y - array[0]).由于每个相邻的数字之差的绝对值为1.故第t个位置之前的数肯定都比y小.因此直接定位到array[t],重新计算t,t = abs(y – array[t]),再重复上述步骤即可.这种算法主要利用了当前位置的数与

相邻元素差的绝对值都是1,在这样的数组中找目标元素

有这样一个数组A,大小为n,相邻元素差的绝对值都是1.如:A={4,5,6,5,6,7,8,9,10,9}.现在,给定A和目标整数t,请找到t在A中的位置.除了依次遍历,还有更好的方法么? 这道题目的解法非常有趣. 数组第一个数为array[0], 要找的数为y,设t = abs(y - array[0]).由于每个相邻的数字之差的绝对值为1.故第t个位置之前的数肯定都比y小.因此直接定位到array[t],重新计算t,t = abs(y – array[t]),再重复上述步骤即可.这种算法主要

(笔试题)将数组分成两组,使两组的和的差的绝对值最小

题目: 数组中的数分为两组,给出一个算法,使得两个组的和的差的绝对值最小数组中的数的取值范围是0<x<100,元素个数也是大于0,小于100比如a[]={2,4,5,6,7},得出的两组数{2,4,,6}和{5,7},abs(sum(a1)-sum(a2))=0; 比如{2,5,6,10},abs(sum(2,10)-sum(5,6))=1,所以得出的两组数分别为{2,10}和{5,,6}. 思路: 初看问题,感觉好像是个组合问题,通过暴力穷举解决问题. 但仔细想想,问题可以转换成,从数组中找

数组:正整数数组分成2组使其和的差的绝对值最小

[问题描述] 把正整数数组 a[N] 中的N个元素任意划分成2部分,使得这2部分和的差的绝对值最小. [算法思路] 问题可转换成,从数组中找出一组数据,使之尽可能等于数组和sum的一半.那么必然有他一半的和是 <= sum/2,接下来用0-1背包问题来解! 现在数组元素即物品,元素值即使是背包问题中的物品weight,也是物品的value,即二者一样,背包容量C = sum/2.问题就是现在满足背包容量情况下,装哪些物品,使得其价值之和最大. [代码] 参见本博客的 "DP:0-1背包问题

lintcode 中等题:maximum subarray difference 最大子数组差

题目 最大子数组差 给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B)|最大. 返回这个最大的差值. 样例 给出数组[1, 2, -3, 1],返回 6 注意 子数组最少包含一个数 挑战 时间复杂度为O(n),空间复杂度为O(n) 解题 刚做了数组中两个子数组和的最大值,这一题是求差,感觉上题的求解思想应该是可以用的 A B 分别是两个子数组的和,则: 所以 当A>B 的时候A越大越好 B越小越好 当A<B 的时候B越大越好 A越小越好

LintCode-最大子数组差

给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B)|最大. 返回这个最大的差值. 您在真实的面试中是否遇到过这个题? Yes 样例 给出数组[1, 2, -3, 1],返回 6 注意 子数组最少包含一个数 挑战 时间复杂度为O(n),空间复杂度为O(n) 标签 Expand 相关题目 Expand 分析:这题还是有点难度的感觉,首先直觉是可以套用求最大字数组和的代码,其次,求差的绝对值最大,那么求出子数组和的最大最小值,然后相减就行,但是有

45 最大子数组差

原题网址:https://www.lintcode.com/problem/maximum-subarray-difference/description 描述 给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B)|最大. 返回这个最大的差值. 子数组最少包含一个数 您在真实的面试中是否遇到过这个题?  是 样例 给出数组[1, 2, -3, 1],返回 6 挑战 时间复杂度为O(n),空间复杂度为O(n) 思路:两个子数组和的差的绝对值|S

阿里 2014-08-29 校招机试题 求一个存放整数的二叉树相差最大的两节点差值绝对值

题目:写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这颗二叉树中相差最大的两个节点间的差值绝对值.请注意程序效率. 如果是数值之差,感觉怎么着也得遍历一遍,直接修改下二叉树的基本遍历代码就可以. #include<stdio.h> #include <stdlib.h> typedef struct Node { int data; struct Node * left; struct Node * right; } BitNode, *BiTree; /* 求

计算两个日期的时间间隔,返回的是时间间隔的日期差的绝对值.

/// <summary> /// 计算两个日期的时间间隔,返回的是时间间隔的日期差的绝对值. /// </summary> /// <param name="DateTime1">第一个日期和时间</param> /// <param name="DateTime2">第二个日期和时间</param> /// <returns></returns> private st