首页 > 其他分享 >面试题 16.07. 最大数值 ——一种基于乘法和位运算的解题思路

面试题 16.07. 最大数值 ——一种基于乘法和位运算的解题思路

时间:2023-07-06 12:44:16浏览次数:43  
标签:面试题 运算 isNegative int 31 16.07 解题 代码 qwq

剧透警告,没写过的勿触

题目:

编写一个方法,找出两个数字a和b中最大的那一个。不得使用if-else或其他比较运算符。

qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq

qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq

qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq

qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq pwq qwq qwq qwq qwq qwq qwq qwq qwq qwq

qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq qwq

先上代码:

class Solution {
    public int maximum(int a, int b) {
        int isNegative = (a / 2 - b / 2) >>> 31;
        return ((1 - isNegative) * a) + (isNegative * b);
    }
}

因为0乘任何数都是0,结果一个0一个1,就可以把乘积相加咯qwq
硬要说问题的话,小数不能使用>>> 31的方式取1(好像是8+23的原因?),比如:0.2 - 0.8 == -0.6000000000000001,解决方式的话可以使用isNegative = (isNegative * 2) | 1来变回正整数。当然,题目的数据集都是整数,而且也恰巧差值都大于1(如果遇到差值为1的样本,那就会报错了),所以* 2只是复原了这个方法/ 2的结果。

加上优化写了四个小时,尝试了四种思路:

  • 使用与、非、异或符号加位运算的数学运算思路
  • 使用try catch和0不能被除的报错
  • 使用数组和布尔值实现减法器
  • 最终方案,上面的代码

当然前两条已经尝试无果了,位运算根本无法摘取出他们的最大值差异,所以就陷入了死循环;至于try catch?开玩笑一样的方法,直接不给过= =

然后是数组和布尔的,上代码:


class Solution {
    public int maximum(int a, int b) {
        int[] res = new int[]{a, b};
        return res[(a / 2 - b / 2) >>> 31];
    }
}

也是从汇编减法器中迸发的想法,一瞬间醍醐灌顶。

然后呢,后面两个解法差不多半小时全部写完awa

后面两个代码的想法来自朋友写的一个公式,产生了火花,感谢朱静Think的帮助:
image.png

图里内容抽象出来就是:
如果|a - b| + (b - a) = 0,则说明a > b,这很重要,是扭转战局的胜负手。

标签:面试题,运算,isNegative,int,31,16.07,解题,代码,qwq
From: https://www.cnblogs.com/Arunoido/p/17531857.html

相关文章

  • “金九银十”和秋招通过率高达 95% 的 Android面试题集锦,你确定不来看看吗?
    前言已经进入七月份了,职场上的“金三银四”也早已经结束。对于求职者来说,面试是一道坎,很多人会恐惧面试,即使是工作很多年的老鸟,也可能存在面试焦虑。就今年的IT行业来说,可能真的根本没有所谓的“金三银四”或是“金九银十”。各大招聘网站或者软件上不管是大厂还是中小公司看似挂个......
  • 金九银十跳槽涨薪Java面试题!568页真题+答案解析,大厂都在考
    2023年一半又过去了,各大企业的招聘也又开始大量放岗了,各位苟着的小伙伴们要抓住机会了! 但很多小伙伴对面试不够了解,不知道如何准备,对面试环节的设置以及目的不了解,尤其是面试题还很难,有些还偏重实战,因此成功率不高。要知道目前校招生面试的成功率低于1%,而社招的面试成功率也......
  • java常见面试题分析及答案
    new一个object对象占多少字节对象头加实例数据16个字节java反射的优缺点Java反射的优点1.增加程序的灵活性,避免将程序写死到代码里2.代码简洁,提高代码的复用率,外部调用方便3.对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法Java反射......
  • 【阿里二面面试题】说说你对 Raft 算法的理解?
    博主介绍:✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家✌......
  • 24届秋招专场 · 数组如何用双指针解题呢?
    你好,我是安然无虞。文章目录删除有序数组中的重复项删除排序链表中的重复元素移除元素移除零大家好,近期主要更新数组相关的解题算法咯,感兴趣的老铁可以一起看过来啦。今天更新使用双指针解决数组部分题型,注意哦,这里所说的双指针不是C语言中“指针”的概念,指的是数组的索引下标,......
  • 1.HTTP面试题
    1.HTTP基本概念1.1HTTP是什么 HTTP(HyperTextTransferProtocol)是超文本传输协议。它是一种双向传输协议。具体来说HTTP是一种在计算机世界里,专门在[两点]之间[传输]文字、图片、音频、视频等[超文本]数据的[约定和规范]。 1.2HTTP常见状态码有哪些 1.3HTTP常见字......
  • 面试题-Spring 面试集
    Spring面试集基于SpringFramework4.x总结的常见面试题,系统学习建议还是官方文档走起:https://spring.io/projects/spring-framework#learn一、一般问题开发中主要使用Spring的什么技术?IOC容器管理各层的组件使用AOP配置声明式事务整合其他框架Spring有哪些优......
  • 面试题-SpringBoot
    概述说说SpringBoot和Spring的关系springboot我理解就是把springspringmvcspringdatajpa等等的一些常用的常用的基础框架组合起来,提供默认的配置,然后提供可插拔的设计,就是各种starter,来方便开发者使用这一系列的技术,套用官方的一句话,spring家族发展到今天,已经......
  • 2023春招面试题:Java并发相关知识
    1.基础知识回顾1.1什么是多线程?在没有线程的年代,在同一个进程中,程序的处理流程都是顺序的,下一个流程的开始必须等待上一个流程的结束,如果其中某一个流程非常耗时,那么会影响整个流程的处理时间cpu执行过程中并不是一个程序执行完之后cpu才切换,cpu时间片用完,就会切换到下个线程......
  • 【大厂面试题】说下 IO 多路复用?
    博主介绍:✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家✌......