数组_01
来源:互联网 发布:台湾娱乐圈知乎 编辑:程序博客网 时间:2024/06/05 09:12
1、给定一个整型数组,是否能找出其中的两个数为某个指定的值?假定数组无序,且元素各不相同,但不允许额外的存储空间。
思路:1、将数组排序 2、首尾元素加指针,计算两数之和,大于target尾指针左移一位,小于target头指针右移一位,直到和等于target为止。
时间复杂度为O(nlogn)
private boolean hasSum(int[] A, int target){ boolean res = false; if(A == null || A.length<2) return res; Arrays.sort(A); int i = 0,j = A.length-1; while(i<j){ if(A[i]+A[j] == target) { res =true; break; }else if(A[i]+A[j]>target){ j--; }else{ i++; } } return res;}
2、在1的基础上返回两数 的下标,可使用额外的存储空间。
时间复杂度O(n),空间复杂度O(n)
private int[] twoSum(int[] A,int target){ int[] res = {-1,-1}; if (A == null || A.length<2) return res; HashMap<Integer,Integer> hashMap = new HashMap<Integer,Integer>(); for (int i = 0; i<A.length;i++){ hashMap.put(A[i],i); } for (int i = 0;i<A.length;i++){ if (hashMap.containsKey(target-A[i])&&target!=2*A[i]){ res[0] = i; res[1] = hashMap.get(target-A[i]); break; } } return res;}3、在2基础上允许集合中出现重复元素。
class TwoSum{ //哈希表里存放<值,个数> HashMap<Integer,Integer> hashMap = new HashMap<Integer, Integer>(); public void save(int input){ int count = 0; if (hashMap.containsKey(input)){ //判断是否已经存在,如果存在则读取个数 count = hashMap.get(input); } hashMap.put(input,count); } public boolean hasSum(int target){ Iterator<Integer> integerIterator = hashMap.keySet().iterator(); while (integerIterator.hasNext()){ int val = integerIterator.next(); if (hashMap.containsKey(target-val)){ boolean isDouble = target==val*2; //如果target值为某元素的两倍,那么只有该元素出现两次或以上才能返回true if (!(isDouble&&hashMap.get(val)==1)){ return true; } } } return false; }}
0 0
- 数组_01
- 20170214C语言提升08_指针_01变量及指针及数组
- java基础_day0019_数组_应用_交换变量的值_01
- 数控系统_01
- 年终_01
- 奋斗_01
- 算法_01
- 刷题_01
- 03_01.cs
- 单片机C51学习心得_01
- SQL学习笔记_01
- 记录他人经验_01
- Java编程下_01
- As 3.0 基础_01
- java反射_01
- Java线程_01
- android 环境搭建_01
- Matlab入门_01
- Python 点球小游戏
- hdu 5673 卡特兰数,逆元
- iOS设计模式(03):工厂方法
- 整型字符常量和字符字面量的区别 sizeof(char) 和 sizeof('a')
- 晏浩洋
- 数组_01
- Spark 2.0介绍:在Spark SQL中定义查询优化规则
- 215. Kth Largest Element in an Array
- JAVA原子性与可见性(一)
- 翻翻git之---低内存损耗,简单易用的汉字->拼音转换库 TinyPinyin
- 最小生成树,Kruskal(买还是建 uva 1151)
- 表的主键特点中,说法不正确的是()
- IOS之导出p12证书
- 【Linux C】浅谈指针(一)