找出数组中左加和等于右加和的数字

快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值 快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解。     假如有如下的两个数组,如图所示:    5,6,1,4,7,9,8    给定Sum= 10    1,5,6,7,8,9    给定Sum= 10首先对数组进行排序,时间复杂度为(N*log2N)  然后令i = 0,j = n-1,看arr[i] + arr[... 阅读详情
  public static void demo1(int arr[]){
        int length = arr.length;
        int leftTotal = 0;
        int rightTotal = 0;
        for(int i=1;i<length;i++){
            if(i==1){
                leftTotal = arr[0];
                for(int j=i+1;j<length;j++){
                    rightTotal += arr[j];
                }
            }else{
                leftTotal = leftTotal+arr[i-1];
                rightTotal = rightTotal-arr[i];
            }
                                    System.out.println("===>i="+i+"=====>leftTotal="+leftTotal+"=====>rightTotal="+rightTotal);
            if(leftTotal == rightTotal){
                System.out.println(arr[i]);
            }
        }
    }
 public static void splitFind(int arr[]){

        int length  = arr.length;
        int head,tail,index;    

        head = 0;
        tail = length - 1;  //倒数第二个数组下标
        index = length / 2;//中间位置

        int total = 0;  //计算出所有的数字之和
        for(int i :arr){
            total += i;
        }
        do{
            int leftTotal = 0;
            //计算出中间数左边的加和
            for(int le = 0;le <index ;le ++){
                leftTotal += arr[le];
            }
            //所有数字总和  - 中间数字的和
            int doubleValue=(total - arr[index]);
            if(leftTotal*2 <doubleValue){
                head = index;
                index = index + (length - index) / 2;
            }else if(leftTotal*2 >doubleValue){
                total = index;
                index = head + (index - head) / 2;
            }else{
                System.out.println(index);
                return  ;
            }
        }while(index > head && index <tail);
    }

以上算法除法和乘法运算优化为位移运算:

 public static void splitFind2(int arr[]){

        int length  = arr.length;
        int head,tail,index;    

        head = 0;
        tail = length - 1;  //倒数第二个数组下标
        index = length >> 1;//中间位置

        int total = 0;  //计算出所有的数字之和
        for(int i :arr){
            total += i;
        }
        do{
            int leftTotal = 0;
            //计算出中间数左边的加和
            for(int le = 0;le <index ;le ++){
                leftTotal += arr[le];
            }
            //所有数字总和  - 中间数字的和
            int doubleValue=(total - arr[index]);
            if(leftTotal<<1 <doubleValue){
                head = index;
                index = index + (length - index) >>1;
            }else if(leftTotal<<1 >doubleValue){
                total = index;
                index = head + (index - head)  >>1;
            }else{
                System.out.println(index);
                return  ;
            }
        }while(index > head && index <tail);
    }
找出数组中只出现一次的数字 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,1] 输出: 1 示例 2: 输入: [4,1,2,1,2] 输出: 4 如果没有时间复杂度和空间复杂度的限制,可以使用集合存储数字。遍历数组中的每个数字,如果集合中没有该数字,则将该数字加入集合,如果集合中已经有该数字,则将该数字从集合中删除,最后剩下的数字就是只出现一次的数字。 Java代码如 阅读详情

相关推荐

找出数组中重复的数字——算法

找出数组中重复的数字 题目描述 给定一个长度为 n 的整数数组 nums,数组中所有的数字都在 0∼n−1 的范围内。 数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。 请找出数组中任意一个重复的数字。 注意:如果某些数字不在 0∼n−1 的范围内,或数组中不包含重复数字,则返回 -1; 样例 给定 nums = [2, 3, 5, 4, 3, 2, 6, 7]。...

Hemx的博客 2231

【算法学习】【数组】左右两边子数组的和相等

VV的算法学习

VV的博客 879

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。

题目: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。 由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。 如果不存在则输出0。 题目分析: 由于要输出的这个数超过数组长度的一半 所以不难理解 如果存在的话 这个数一定是排完序后的数组的中间元素 因此我们将数组有序之后 用一个count记录...

enemyfloggers的博客 1173

JS实现中心索引,数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和

给定一个数组,求数组的中心索引, 一个数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。

Gaozhengw的博客 871

66. 给数组的数字加一

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 示例 1: 输入: [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 123。 示例 2: 输入: [4,3,2,1] 输出: [4,3,2,2] 解释: 输入数组表示数字 4321。 ...

qq_43410906的博客 1562

STM32 RC522串口驱动程序 (简单直接)

rc522作为使用非常多的读写卡芯片,使用SPI芯片读写应用已经非常广了。但有些时候我们只有串口可以使用,或者我们觉得串口使用更加方便,那么就必须要编写串口的驱动程序。不过很难找到可以直接使用的串口程序。所以在此将我这边写好的串口驱动写好如下: 直接上代码 下面是RC522.C的驱动文件。支持读写卡号8位数据。rc522用的是stm32 的串口3,调试显示是串口1; #include "rc522.h" #include "delay.h" /////////////////////////////////

qq_42074368的博客 9003

【剑指 Offer II】 12 左右两边子数组的和相等

题目 链接【剑指 Offer II】 12 左右两边子数组的和相等 描述 给你一个整数数组 nums ,请计算数组的 中心下标 。 数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。 如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 输入与输出 输入:nums = [1,7,3,6,5,6]

就这样吧 417

Claude Code vs Codex

Claude Code 提供了一个生产就绪(production-ready)的实现,包含良好的错误处理、优雅的关闭逻辑、详细注释和文档,以及内置测试。Claude Code 输出了一个可运行的 Next.js + TypeScript 前端,但错过了一些设计里的黄色主题元素;Codex 则生成自己的版本,没有导出设计中的图片,也没严格遵照设计主题。Codex 完成同样功能,但更简洁直接,文档和注释少一些但功能达标。任务都用同样的提示,使用 TypeScript 实现,并在一天内完成。

weixin_49869937的博客 2394

在一个乱序数组中有很多数,找出两个数相加之和等于另外一个指定的数

public static void main(String[] args) { int a[] = new int[]{2,4,6,8,3}; Arrays.sort(a); //2 3 4 6 8 int b = 12; int j = a.length - 1; for (int i = 0; i <= j; ) { if (a[i] == b...

weixin_30846599的博客 779

STM32驱动四位共阳极数码管实现高精度秒表计时器

本文详细介绍了如何使用STM32驱动四位共阳极数码管实现高精度秒表计时器。项目基于STM32F103C8T6最小系统板,通过定时器中断和GPIO控制,实现0.1秒精度的计时功能,并解析了共阳极数码管的动态扫描原理及按键消抖等关键技术。

n8m7b6v5c4的博客 951

Halcon实战:5分钟搞定灰度图转热力图(附完整代码)

本文提供了一份Halcon实战指南,详细讲解如何在5分钟内将灰度图转换为直观的热力图。通过核心代码演示了利用HSV颜色模型进行色彩映射的原理与步骤,包括图像归一化、通道构建与空间转换,并附赠了深度图可视化等进阶应用技巧,帮助工程师快速提升图像分析效果。

weixin_29240343的博客 283

算法:请找出数组中的某个数,它的左侧数字相加之和等于右边。

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33995481的博客 1436

金蝶云星空初级实施认证考题

Q4.[单选题] (1.5分) 总账中的多账簿账表主要是基于什么进行查看的Q47.[多选题] (2.5分) 销售订单的收款计划页签勾选预收之后,预收控制环节可以控制哪些节点?

m0_51994557的博客 3125

面试必考真题-算法篇:给出一个整数数组,请在数组中找出两个加起来等于目标值的数。

面试必考真题-算法篇 牛客网 数组 哈希 题目描述 给出一个整数数组,请在数组中找出两个加起来等于目标值的数, 你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足 index1 小于index2.。注意:下标是从1开始的 假设给出的数组中只存在唯一解 例如: 给出的数组为 {20, 70, 110, 150},目标值为90 输出 index1=1, index2=2 题目分析 利用HashMap进行存储,每次存储利用target-当前数字的值作为key,将当前数字的坐

gaozhuang63的博客 2602

UG二次开发GRIP刻字

UG二次开发GRIP刻字

qq285503851的博客 1138

uniapp [全端兼容] - 详细实现拍照或相册选取图片后插入水印功能,手机拍照或相册上传图像并添加自定义水印及指定位置显示水印,uniApp给图片加水印后上传到后端服务器或保存到本机相册详细教程!

uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,图片水印,上传照片带水印,从相册选择图片加水印功能,拍完照片给图片加水印,添加照片水印,uniapp图片加水印,为图片添加自定义水印,uni-app上传图片并添加水印,上传图片加水印,uni-app如何对拍摄的照片加水印,uni-app实现图片上传添加水印操作,给上传的图片添加上水印,图片加完水印后如何上传到服务器,水印相机,拍照图片加水印,相册选取后给图片加上水印,渲染失败,无法保存,文字水印,日期

🏆 前端领域优质创作者 1万+

在数组中找出四个数字的和等于指定数字(4Sum)

Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target. Note: The solution

K.Sun 3253

ABB机器人将实时坐标发送给西门子PLC的具体方法示例

ABB机器人将实时坐标发送给西门子PLC的具体方法示例

Robot_PLC_HMI_Automation 4914

面试题 & 快速找出数组中两个数字,相加等于某特定值的 四种实现方式

JAVA基础面试题:快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值。假设数组中的都是各不相等的整数。 这道题看起来很简单,但往往在面试中许多人一下子答不出来。 下面四种实现方式使用相对巧妙的方法来实现上述算法,供参考 。 方法一 1、拿目标值减去循环中的某个数组的元素值。 2、如果元素符合条件,就将下标放入到Map集合中。 public static Map<Integer,Integer> method1(int[] nums, int sum){ ...

Sundy_sc的专栏 4758

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

快速找出一个数组中的两个数字,其和等于给定值。

快速找出一个数组中的两个数字,其和等于给定值。 解法1:穷举法,时间复杂度O(N); 解法2:变通思路,对数组中的每个数字arr[i]都判别sum-arr[i]在不在数组中。这样就变通为一个查找算法。将数组排序,需要时间O(N*logN)。对于每个arr[i]用二分法查找sum-arr[i]的时间复杂度都为O(logN),总计N*O(logN)+ O(N*logN)= O(N*logN)。

我的读书笔记(2011-2013) 4223

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

找出数组中的重复数字

题目:找出数组中的重复数字 在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有哪几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者是3。 方法一:排序,将数组的数字排序,在排好序的数组中找到重复的数组,时间复杂度很大O(nlogn)。 方法二:把每一个数字都扫描,看与其他剩下的数字是否相同。时间复杂度是O(n^2),两次for循环找出相同的数。

风也温柔呀 2001

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

leet-code 找出数组中所有可以使数字和为target的组合

题目: 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 语言: python 解题思路: 遍历 数组,用target 减每一个数组中的每个元素, 判断差是否在该数组中, 用元组去存i和差,并判断(差,i) 是否已经在结果集中,如果在的话,那么就不添加到结果数组中,如果不存在才将(i,差)添加到结果集中。 candidates = [1, 2, 4, 3,...

Dream_it_possible!的博客 2358

Java实现找出数组中重复的数字

题目描述:找出数组中重复的数字 在一个长度为n的数组里的所有数字都在 0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如:如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出的是重复的数字2或者3 这个面试题是剑指offer中的面试题3,,下面我用java代码实现。 算法步骤:  

xzp_12345的博客 1万+

找出数组中重复的数字

在一个长度为n的数组中,所有的数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数组重复了几次。请找出数组中任意一个重复的数字。 例:输入长度为7的数组{2,3,1,0,2,5,3}, 对应的输出的重复的数字是2或3。 方法1:先排序在查找 方法2:利用哈希表 从头到尾扫描每个数字,每扫描一个数字,都可以用O(1)的时间来判断哈希表是否包含了该数字。...

斜月&三星 2958
上一篇: 反转字符串的四种方法
下一篇: Java实现身份证校验算法
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值