当前位置:网站首页>leetcode 22.7.31(1)两数之和 (2)整数除法
leetcode 22.7.31(1)两数之和 (2)整数除法
2022-08-04 07:07:00 【硬核哈士奇】
两数之和
![[)(C:\Users\YLF\AppData\Roaming\Typora\typora-user-images\image-20220731161847367.png)]](/img/56/a9f02bbe2ca384d3592897844b0a71.png)
暴力枚举
//方法1 暴力枚举
public static int[] twoSum(int[] arr,int target){
//两轮循环
for (int i = 0; i < arr.length; i++) {
for (int j = i+1; j < arr.length; j++) {
if (arr[j]==target-arr[i]) return new int[]{
i,j};
}
}
return null;
}
}
此种解法简单粗暴,时间复杂度很显然为O(N^2),空间复杂度因为只用到了额外的target这个变量所以为O(1)。
哈希表解法
//方法2 哈希表
public static int[] twoSum02(int[] nums,int target){
//先创建一个HashMap,已知HashMap的key值不能重复,而理想情况下当不发生哈希冲突的时候查询HashMap的时间复杂度为O(1)
Map<Integer,Integer> map=new HashMap<>();
for (int i = 0; i < nums.length; i++) {
//每次循环中先判断哈希表中是否存在key值为nums[i],因为哈希表中的元素的key都是target减去前面判断过的num[i]得到的值,如果匹配那么就说明找到了答案,直接返回即可,因为这题中只有一组答案
if (map.containsKey(nums[i])) return new int[]{
map.get(nums[i]),i};
//如果没有找到答案,那么就往哈希表里放上一对key,value。
map.put(target-nums[i],i);
}
return null;
}
此种解法时间复杂度为0(N),因为查询哈希表理想情况下时间复杂度为O(1),而空间复杂度则因为引入了哈希表,且最糟糕情况哈希表的键值对个数为N-1,所以其额外空间复杂度为O(N)。
剑指 Offer II 001. 整数除法
剑指 Offer II 001. 整数除法 - 力扣(LeetCode)

解法
public static int divide(int a, int b) {
int res=0;//商初始值为0
int flag = 0;//用作最后判断商的正负
if(a==0) return 0;//被除数a为0的情况,商不管如何都为0
if (b==1) return a;//任何数除以1都为任何数
if (a==b) return 1;//任何数除以自己(0除外)都为1
if (b==Integer.MIN_VALUE) return 0;//先解决32位整数最小值改变改变符号之后的越界问题
if (a==Integer.MIN_VALUE){
a+= Math.abs(b);
res=1;
}
//把a和b全部绝对值化
//用flag来记录a和b的正负情况
if(a<0){
flag++;
a=Math.abs(a);
}
if (b<0){
flag++;
b=Math.abs(b);
}
//三种特殊情况,当然都是除数b=1的情况下
if((flag==0||flag==2)&&b==1) return a;
if(flag==1&&b==1) {
a = ~a+1;
return a;
}
//这里就是循环相减来模拟除法
while (a>=b){
a-=b;
res++;
}
//因为一正一负的两数除法运算之后答案为负数,所以要取反
if(flag==1) {
//这里利用取反操作来将一个正数变为负数:
res = ~res+1;
}
return res;
}
这题主要还是折腾在32位整数的边界问题上,因为计算机中32位整数采用补码表示法所以它的值域不是对称的,最小为-2^32 最大为2^32-1 而一旦直接把最小值的负号去掉,那么就会导致越界问题的出现。此题还是需要一步步排除各种情况的干扰,才能完全应对所以的测试用例。
边栏推荐
- 解决:Hbuilder工具点击发行打包,一直报尚未完成社区身份验证,请点击链接xxxxx,项目xxx发布H5失败的错误。
- Distributed Computing Experiment 1 Load Balancing
- FCN - the originator of semantic segmentation (based on tf-Kersa reproduction code)
- 串口监听 - 软件方案
- 【我想要老婆】
- a标签下载图片,不要预览
- TCP协议详解
- SQL如何从字符串截取指定字符(LEFT、MID、RIGHT三大函数)
- data:image/jpg; base64 format data is converted to image
- 字节跳动岗位薪酬体系曝光,看完我真的酸了...
猜你喜欢

ubuntu18.04安装redis教程

unity webgl报 Uncaught SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON

The national vocational skills contest competition of network security emergency response

Lightweight Backbone VGNetG Achieves "No Choice, All" Lightweight Backbone Network

一天学会JDBC03:Statement的用法

【愚公系列】2022年07月 Go教学课程 027-深拷贝和浅拷贝

Amazon亚马逊 Vendor Central Label详解

小猫爪:AWR294x学习笔记02-AWR294x之DPM&IPC

反序列化字符逃逸漏洞之

Error ER_NOT_SUPPORTED_AUTH_MODE Client does not support authentication protocol requested by serv
随机推荐
轻量化Backbone VGNetG成就“不做选择,全都要”轻量化主干网络
「PHP基础知识」转换数据类型
2022爱分析· 银行数字化厂商全景报告
千万级别的表分页查询非常慢,怎么办?
全国职业院校技能大赛网络安全竞赛之应急响应
likeshop外卖点餐系统开源啦100%开源无加密
串口监听 - 软件方案
MySQL 8.0.29 详细安装(windows zip版)
QT + msvc2017编译器
使用腾讯云发送短信 ---- 手把手教你搞定所有步骤
MySQL BIGINT 数据类型
fanuc机器人IO分配报警信号分配无效
将回调函数转为Flow
The school to apply for link
DropBlock: Regularization method and reproduction code for convolutional layers
MMDetection finetune
ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘localhost3306‘ (10061)解决办法
Lightweight Backbone VGNetG Achieves "No Choice, All" Lightweight Backbone Network
Distributed Computing Experiment 1 Load Balancing
entity、domain、vo、pojo的区别与联系