华为面试题:交换两个数组,使得数组的和的差最小

交换两个数组的元素,使两个数组和的差最小 前些时候面试碰到的题目:有两个有序正整数数组array1[N]、array2[M],通过交换两数组的元素,使两个数组的和最接近。 基本算法思路:每次从array1、array2选择出一对能使交换后得array1和与array2和的差值变小的组合array1[i]、array2[j 阅读详情
/* 
 * question: 华为面试题:交换两个数组的部分元素,使得这两个数组的和的差最小。 
 * Author: hongbin
 */
/*
 9 11 18 19 
merge sorted ->
19 18 11 9 8 7 4 1 


after selection,data list -> 
19 9 8 4 
18 11 7 1 
 
 */
#include <cstdlib>
#include <iostream>
#include <ctime>
#include <assert.h>


using namespace std;


void swapdata(int& x, int &y){
   int temp;
   temp=x;
   x=y;
   y=temp;
   return;
}


void Display(int data[],int begin,int end){
 if(data==NULL) return;
 for(int index=begin;index<=end;index++){
  cout<<data[index]<<" ";
 }
 cout<<endl;
}
//data1 and data2 are sorted descendedly


bool ExchangeData(int total[],int array1[],int array2[],int len){
assert(total !=NULL &&array1 !=NULL && array2 != NULL && len >0 );
int sum1,sum2,index1,index2;
sum1=sum2=index1=index2=0;

while(index1<len && index2<len) {
   if(sum1>sum2) { 
       sum2+=*total;
       array2[index2++] = *total++;
     }
   else {
     sum1+=*total;
     array1[index1++] = *total++;
    }      
 }


while(index1<len)
   array1[index1++] = *total++; 


while(index2<len)
   array2[index2++] = *total++; 


return true;    
}


//归并排序

int* mergesort(int data1[],int data2[],int length1,int length2) {
  assert(data1 != NULL && data2 != NULL);    
  assert(length1 >=0 && length2 >=0 );  
 
  int index=0,len1=0,len2=0;
  int *data3=new int[length1+length2]; 
  
   
  while( len1<length1 && len2<length2 ){
    data3[index++]= data1[len1]>data2[len2]? data1[len1++]:data2[len2++];
  }


   while(len1<length1)  
    data3[index++]=data1[len1++];
  
  while(len2<length2)  
       data3[index++]=data2[len2++];
   
  cout<<"merge sorted ->"<<endl;
  Display(data3,0,length1+length2-1);
   
   return data3;   
}
/*
 * 
 */
bool myqsort2(int data[],int begin,int end){
   bool result=true; 
    
  if( data==NULL || end < 0 || begin < 0 || begin > end) 
      return false;   
   if(begin==end) 
       return result; 
    
    int compare_point,i,j,pilotkey;
    
    srand((unsigned int)time(NULL));
    compare_point=begin + rand()%(end-begin+1);
    pilotkey=data[compare_point];
    
    swapdata(data[compare_point],data[end]);
    
    i=begin;
    j=end;
    
    while(i<j) {   
        while(data[i] >= pilotkey && i<j)
         i++;     
        if(i<j)
          swapdata(data[i],data[j--]);    
     
         while(data[j] <= pilotkey && i<j)
             j--;        
         if(i<j)         
           swapdata(data[i++],data[j]);     
     }
   
    myqsort2(data,begin,i-1);
    myqsort2(data,i+1,end);


}


//descending sort
bool myqsort(int* data,int begin,int end){
  bool result=true;
   int compare_point,midvalue,pivot,index;
   int tempdata;
   
  if( data==NULL || end < 0 || begin < 0 || begin > end) 
      return false;
   
   if(begin==end) 
       return result;
  
   //generate a random number between begin and end
    srand((unsigned int)time(NULL));
    compare_point=begin + rand()%(end-begin+1);
   
   midvalue=data[compare_point]; //use the middle point 
  
  //exchange pivot value into the last element of array 
  swapdata(data[compare_point],data[end]);
   
  index=begin;
  pivot=begin-1;
  while(index <= end){
    if(data[index] > midvalue){   
       if((++pivot) != index){  
        swapdata(data[pivot],data[index]);    
       }      
      } 
    index++;   
  }
  
 //exchange pivot value into the last element of array   
  swapdata(data[++pivot],data[end]);
   
  myqsort(data,begin,pivot-1);
  myqsort(data,pivot+1,end);
  
  return result;
}


int main(int argc, char** argv) {
 //  int data1[]={142,3,2,-12};
 //  int data2[]={31,4,2,1};
    int data1[]={1,4,7,8};
    int data2[]={9,11,18,19};
    int *data3=NULL;
 
   cout<<endl<<"before selection, data list -> "<<endl;
   Display(data1,0,sizeof(data1)/sizeof(int)-1);
   Display(data2,0,sizeof(data2)/sizeof(int)-1);
   //qsort
   myqsort(data1,0,sizeof(data1)/sizeof(int)-1);
   myqsort(data2,0,sizeof(data2)/sizeof(int)-1);
   
    //data3 save all data merges sorted 
   data3=mergesort(data1,data2,sizeof(data1)/sizeof(int),sizeof(data2)/sizeof(int));
 //  cout<<endl<<"after merge sorting"<<endl;
 //  Display(data3,0,7);
   //dispatch data from data3 to data1 or data2 upon the sum difference of data1 and data2 is the least. 
   ExchangeData(data3,data1,data2,sizeof(data1)/sizeof(int));
   
   cout<<endl<<"after selection,data list -> "<<endl;
   Display(data1,0,sizeof(data1)/sizeof(int)-1);
   Display(data2,0,sizeof(data2)/sizeof(int)-1);
   delete []data3;
   return 0;
}

华为面试题:通过交换元素,使两个数组的元素和之差最小 题目如下: 有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小。 网上说01背包问题,我也不懂。但是我写了个算法,应该还可以达到要求。 思路如下: 1. 计算数组a, b元素之和sumA, sumB,求出两者之差 sumDiff。 2. 从数组a, b中找到元素a[i], b[j],使得 2 * ( 阅读详情

相关推荐

华为秋招_多数组合并问题.doc

只是华为秋招的笔试题(编程部分),自己编写的答案,题为:多个数组按顺序合并(以java代码在Eclipse实现的为展示)。题目表述:现在有多组整数数组,需要将他们合并成一个新的数组。合并规则,从每个数组里按顺序取出固定长度的内容合并到新的数组中,取完的内容会删除掉,如果该行不足固定长度或者已经为空,则直接取出剩余部分的内容放到新的数组中,继续下一行。如样例1,获得长度3,先遍历第一行,获得2,5,6;再遍历第二行,获得1,7,4;再循环回到第一行,获得7,9,5;再遍历第二行,获得3,4;再回到第一行,获得7,按顺序拼接成最终结果。

[面试题] 求数组两两之差绝对值最小的值(Update Version)

  由于准备找工,最近也用零星的时间做了一些面试题,这道题属于偏难的那种了,之所以说它偏难,主要是因为按常规思维不容易得到最优解,更重要的是,此题的转化不容易想到。做过编程之美的同学都能了解到,很多题目都需要一种“转化”的思想,把问题转化为另一种已知的熟悉的问题去求解,这种思路在《如何解题》也是被提到了很多次,不过实施起来真的不容易。   一 题目描述:   有一个整数数组,请求出两两之差...

weixin_30273501的博客 1413

无人机巡检提速3倍!YOLOv8n+OpenVINO让Jetson Nano跑25FPS,还能多飞25分钟

摘要(149字): 针对无人机巡检中Jetson Nano算力不足导致的帧率低、首次推理延迟高、续航短等问题,提出YOLOv8n+OpenVINO联合优化方案: 模型轻量化:YOLOv8n参数量仅3.2M(较v8s减少71%),Jetson Nano帧率从8FPS提升至15FPS(原生),绝缘子裂纹召回率仅降3%; OpenVINO加速:AUTO模式动态分配CPU/GPU算力,首次推理延迟从500ms降至200ms,帧率再优化至25FPS; 能效提升:功耗降低40%,单次续航延长25分钟。方案已落地电力/林

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1242

交换两个数组使两个数组和的差最小

<br />今天又看见了这个题目,好像上次是李灾跟我说腾讯面他的时候问了这个问题的。想了半天,在网上也看了半天,发现一个不错的算法,先帖出来:^ ^<br /> /*<br />    有两个数组a,b,大小都为n,数组元素的值任意整形数,无序;<br />    要求:通过交换a,b中的元素,使[数组a元素的和]与[数组b元素的和]之间的差最小。<br />*/<br />/*<br />    求解思路:<br />    当前数组a和数组b的和之差为<br />    A = sum(a) - sum

flyko920的专栏 959

LTspice introduction - 2 LTspice的界面

LTspice的界面主要有两个:Schematic Capture和Waveform Viewer Schematic Capture 它主要是用来画电路图的,画完电路图之后,添加一些dot 命令同时选择一些仿真的参数,点击执行(Run)Waveform Viewer 如果你的仿真不是op point的话,一个都会打开它,在它里面你可以画图相应的图形。 有两种方式可以在Viewer

贾亮的专栏 3220

手把手教你用STM32CubeMX配置I3C通信(含动态地址分配实战)

本文提供了一份基于STM32CubeMX配置I3C通信的实战指南,重点讲解了动态地址分配的实现步骤。通过详细的工程配置、从设备枚举、CCC命令使用及数据读写示例,帮助开发者快速掌握这一高效通信协议,以替代传统的I2C或SPI接口,满足多传感器连接与低功耗设计需求。

c8d9e0f1的博客 542

华为面试题(8分钟写出代码) 有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小

思想一定是求差运算,然后缩小差值 #include "stdio.h" #include "conio.h" #include "math.h" #define true 1 #define false 0 #define N  5   //N代表数组长度,C语言没有length属性,只能人为地宏定义一个参数? void huawei(int A[],int B[]) {

zhulike2011的专栏 3548

微信数据库读取解密脚本 聊天记录查看工具,支持所有微信版本,后期将支持企业微信[Windows]

(1)获取微信昵称、微信账号、微信手机号、微信邮箱、微信KEY的基址偏移(2)获取微信的微信昵称、微信账号、微信手机号、微信邮箱、微信KEY、微信原始ID(wxid_******)(3)获取微信文件夹路径(4)支持查看聊天记录查看(5)根据key解密微信数据库(6)提供数据库部分字段说明(7)支持微信多开场景,获取多用户信息等(8)微信需要登录状态才能获取数据库密钥(9)支持导出聊天记录为html,备份微信聊天记录,方便查看(10)合并多个数据库,方便查看。

weixin_43101935的博客 1万+

华为面试题 题目:有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小

package com.yzh.test; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class SortList { public static void main(String[] args) { List a = new A

4389

矩阵束(Matrix Pencil)入门:从通信系统到控制理论,它为何是建模利器?

本文深入探讨矩阵束(Matrix Pencil)在通信系统与控制理论中的关键作用,揭示其作为复杂系统建模利器的独特价值。从MIMO系统的多径干扰分析到电力系统稳定性判据,矩阵束通过`A-λB`方程求解提供精准建模方案,显著提升5G通信和工业控制等领域的性能表现。

weixin_30134145的博客 358

在轻量化与精度之间取得平衡:YOLOv8 + GhostNet 的设计与实验分析

摘要: GhostNet系列(GhostNet、GhostNetv2、GhostNeXt)通过“幽灵特征图”技术,以极低计算量生成丰富特征,为YOLOv8提供轻量化改造方案。该技术能在减少参数量与计算量的同时保持或提升检测精度,适用于边缘设备部署。实现时需替换YOLOv8的Backbone为GhostNet模块,并通过消融实验验证其有效性。实验数据表明,改造后的模型在参数量降低30%的同时,推理速度提升28.6%,mAP@0.5最高提升1.9个百分点,平衡了轻量化与精度,为毕设提供技术创新性与工程落地性的双

m0_64661770的博客 194

两数组和的差最小问题

题目来源于传说中的华为面试题: 有两个长度都为n的数组,分别为a,b。数组元素类型为整型,值任意且无序。要求通过交换a,b数组的元素,使得数组a的和与数组b的和的差最小。   这个题目网上很多博客给出的一种解法都是错的,他们的思路是每次交换一对数据,如果交换能使得差变小就交换,否则就不交换。这个解法简单直观,其实本来目的就是穷举。可是本题却存在这种情况,即找不到任何一对数据的交换使得差变小(这...

L__ear的博客 2486

SAP 中租赁资产的实现需区分经营租赁与融资租赁,核心围绕资产主数据配置、折旧与利息设置、科目分配及业务操作展开

摘要:SAP系统租赁资产管理需区分经营租赁与融资租赁,通过SPRO配置资产主数据、折旧范围、利息计算及科目分配。关键步骤包括:激活折旧范围利息计算(OABZ)、设置租赁资产类别(OAYZ)、维护总账科目(AO90)及创建租赁资产主数据(AS01)。业务操作涵盖资产资本化(ABZON)、折旧利息过账(AFAB)、租金支付(F-53)及终止处理(ABUMN)。核心配置要点在于准确设置租赁类型、利率参数和科目联动,确保系统自动计算折旧与利息并生成正确凭证。

金牌架构师 1069

8分钟写出代码的华为面试题?不要被标题迷惑!

在程序员的江湖中,有一个流传了很久的故事,那就是: 华为面试题(8分钟写出代码): 有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小 华为面试题(8分钟写出代码) (注意发帖时间:2006年)可怜一个“8分钟”,让无数程序员在8小时、8天、8周、甚至8年仍然未找出满意的答案而掉入了自卑的漩涡无法自拔!这道题根本

lsldd的专栏 4029

【AI Agent 记忆共享实战】【下篇】多 Agent 会话 Session 统一共享实战:全链路工程落地、采集归一、MCP 服务、私有化部署、源码级实战

中篇我们已经锁定最终最优架构方案: 非侵入式、外部旁路采集、只读归一、中心化存储、MCP 按需检索注入。摒弃「改 Agent 源码」「软链接互通」「原生 Session 互导」等不现实方案。本篇直接落地可上线、可简历复用、可个人私有化部署多 Agent 异构 Session专属采集器(Claude/CODex/DSH/OpenCode/Kimi/WorkBuddy/ 豆包)统一消息归一化解析层(解决所有 Schema 异构)增量同步、去重、时间戳对齐核心逻辑。

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 478

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

算法--06年华为面试:求两个数组的最小差值(Java实现)

Q题目华为06年面试题(要求8分钟完成)

Java仗剑走天涯 8943

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

python输入数组、最大的与第一个元素交换、最小的_[Python]华为面试题,交换两个数组的元素使之总和的差值最小。...

评论28 楼leero2011-04-04看不懂python,27 楼jigloo2011-04-02你确认"解决"了吗?楼上的这些"多项式算法"要不是错误的,要不就是不满足题意。就是我提醒你的"两个数组长度要一致"26 楼wjm2512011-04-02jigloo 写道wjm251 写道jigloo 写道这是个NPC问题,所以就用穷举发了,在这里给出了一个用python的itertools的解...

weixin_42310558的博客 565

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

python交换数组中的两个元素_[Python]华为面试题,交换两个数组的元素使之总和的差值最小。...

看看写了个 ,实现不需数组长度一致,复杂度O(n^2),求好的算法/** arr1={1,2,3};* arr2={22,33,44,55};* 交换两个矩阵数据*/public void exchange(){int index=0;int len=arr1.length;int currMinus=getMinus();while(true){for (int i = 0; i < ...

weixin_39951295的博客 464

华为面试题,10个数分成两组,两数组和的最小差

华为面试题,10个数分成两组,两数组和的最小差 import java.util.Arrays; import java.util.Scanner; //1 2 3 4 5 6 7 8 9 10 // 6 7 8 9 10 public class Test2 { public static void main(String[] args) { //2.调用处理数组的函数 Scanner sc = new Scanner(System.in);

weixin_38623113的博客 2581

华为面试题(8分钟写出代码)

今天又看见了这个题目,好像上次是同学跟我说腾讯面他的时候问了这个问题的。想了半天,在网上也看了半天,发现一个不错的算法,先帖出来:^ ^ /* 有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小 */ /* 求解思路: 当前数组a和数组b的和之差为 ...

a2757400163的博客 1341

有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。

<br />华为面试题 <br /> <br />32.<br />有两个序列a,b,大小都为n,序列元素的值任意整数,无序;<br />要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。<br />例如:   <br />var a=[100,99,98,1,2, 3];<br />var b=[1, 2, 3, 4,5,40];<br /> <br />   求解思路:<br />    当前数组a和数组b的和之差为<br />    A = sum(a) - sum(

5759

背包算法解决一道华为面试题

闲来无事,看到了一篇文章,华为面试题,题目如下: 有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小 网址是http://bbs.chinaunix.net/thread-855126-1-1.html这个。 估计多数人想到的都是先sort,再交叉,或者一条龙什么的,包括我。后来一想不对啊,

tzmyf234的专栏 744

一道算法题:华为面试题

http://bbs.chinaunix.net/thread-855126-1-1.html 有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小 我们假设有数据: a: 6  20 100 b: 19 20 70  在网站上看到有如下解法: 解法 1, 

juneman的专栏 1524
上一篇: Company BDui 面试 笔试 : 从10个已按从大到小排列好的数组中,求top 15个最大的数
下一篇: Company A面试 笔试 : 爬山 算步骤 问题 另外一种解法
大树叶
博客等级 码龄12年 1171粉丝 664原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值