target

LeetCode——最接近的三数之和

前提是你 提交于 2020-03-05 22:28:26
题目描述: 给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。 答题思路: 1)对数组进行排序 2)设置一个总循环,循环变量设为i 3)设置左右指针,分别从i+1和最后的元素开始进行遍历 4)得到结果 具体程序如下: class Solution : def threeSumClosest ( self , nums : List [ int ] , target : int ) - > int : lens = len ( nums ) nums . sort ( ) m = nums [ lens - 1 ] + nums [ lens - 2 ] + nums [ lens - 3 ] n = nums [ 0 ] + nums [ 1 ] + nums [ 2 ] for i in range ( lens ) : L = i + 1 R = lens - 1 if i > 0 and nums [ i - 1 ] == nums [ i ] : i += 1 continue while L < R : a = nums [ i ] + nums [ L ] + nums [ R ] if a == target : return a

leetcode15. 3Sum 16.3Sum Closest

大城市里の小女人 提交于 2020-03-05 22:16:43
相关主题:Array, two pointers using Java 题目 15 Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero. 16 Given an array nums of n integers and an integer target, find three integers in nums such that the sum is closest to target. Return the sum of the three integers. You may assume that each input would have exactly one solution. 难度 都是medium 思路异同 相同点 因为是判断3个数的和,都是先固定一个数fix,然后转化成2个数的和的问题,具体方案是:先将数组由小到大排序,然后遍历数组到n-2个数,每次从fix的后面找另外2个数(因为3个数里包括该数前面的数的情况已经考虑过了),设置left,right分别指向fix后一个数和数组的最后一个数

leetcode刷题(30天)-16. 最接近的三数之和

廉价感情. 提交于 2020-03-05 21:45:36
class Solution { public int threeSumClosest ( int [ ] nums , int target ) { if ( nums . length == 0 ) { return 0 ; } Arrays . sort ( nums ) ; //排序 int distance = nums [ 0 ] + nums [ 1 ] + nums [ 2 ] - target ; for ( int i = 0 ; i < nums . length ; i ++ ) { if ( distance == 0 ) break ; int r = nums . length - 1 ; int l = i + 1 ; while ( l < r ) { int dis = ( nums [ l ] + nums [ r ] + nums [ i ] ) - target ; if ( dis == 0 ) { distance = dis ; break ; } if ( Math . abs ( distance ) > Math . abs ( dis ) ) { distance = dis ; } if ( dis > 0 ) r -- ; else l ++ ; } } return distance + target ; } } 来源:

【LintCode 题解】小米面试算法题:搜索旋转排序数组

爷,独闯天下 提交于 2020-03-05 18:23:43
题目描述 假设有一个排序的按未知的旋转轴旋转的数组(比如, 0 1 2 4 5 6 7 可能成为 4 5 6 7 0 1 2 )。给定一个目标值进行搜索,如果在数组中找到目标值返回数组中的索引位置,否则返回-1。你可以假设数组中不存在重复的元素。 点击 在线评测代码 样例 例1: 输入: [4, 5, 1, 2, 3] and target=1, 输出: 2. 例2: 输入: [4, 5, 1, 2, 3] and target=0, 输出: -1. 题解 应用二分法分类讨论。 注意一下分类的细节即可。 相比自己刷题,有大神带着刷效果肯定更好,专业的 算法课程 (点击免费试听)可以随问随答,在最短时间内提高算法水平,应对大厂面试。 public class Solution { public int search(int[] A, int target) { if (A == null || A.length == 0) { return -1; } int start = 0; int end = A.length - 1; int mid; while (start + 1 < end) { mid = start + (end - start) / 2; if (A[mid] == target) { return mid; } if (A[start] < A[mid])

10、矩形覆盖

余生颓废 提交于 2020-03-05 18:06:22
我们可以用2 1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2 1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 比如n=3时,2*3的矩形块有3种覆盖方法: public class Solution { public int RectCover ( int target ) { if ( target < 0 ) return - 1 ; if ( target <= 1 ) return target ; int a = 1 ; int b = 1 ; int result = 0 ; for ( int i = 1 ; i < target ; i ++ ) { result = a + b ; a = b ; b = result ; } return result ; } } 来源: CSDN 作者: qq_41017546 链接: https://blog.csdn.net/qq_41017546/article/details/104679176

变态跳台阶

时间秒杀一切 提交于 2020-03-05 15:04:18
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 分析:题目指出有n级台阶。 如果是第一步,则有n种跳法:跳1级,跳2级,跳3级……跳n级 跳1级时候,剩下了n-1级,则剩下的跳法是f(n-1) 跳2级时候,剩下了n-2级,则剩下的跳法是f(n-2) 即:f(n) = f(n-1) + f(n-2) + ……+f(1) 在上面的推导中可以知道:f(n-1) = f(n-2) + f(n-3) + …… + f(1) 所以可以推导出:f(n) = 2 *f(n-1) 方法一:利用移位操作 public class Solution { public int JumpFloorII(int target) { return 1<<(target-1); } } 方法二:迭代法 public class Solution { public int JumpFloorII(int target) { if(target <= 0){ return 0; } if(target == 1){ return 1; } int num1 = 1, num2 = 2; while(target-- > 1){ num2 = 2* num1; num1 = num2; } return num2; } } 来源: CSDN 作者

LeetCode16.最接近的三数之和

白昼怎懂夜的黑 提交于 2020-03-05 11:17:59
题目描述 给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。 例如,给定数组 nums = [-1,2,1,-4], 和 target = 1. 与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2). 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/3sum-closest 题解 借鉴15题的思路,运用双指针的方法。 特例:如果数组长度小于3,则直接返回 将数组进行排序,这样可以利用一些排序好的性质。而且排序算法时间复杂度为 O ( n log ⁡ n ) O(n\log n) O ( n lo g n ) ,不会影响整体时间复杂度 遍历数组,设置左右指针 L , R L,R L , R 分别指向 i i i 的下一位和数组最后一位,确保 L < R L<R L < R ,循环 令 s u m = n u m s [ i ] + n u m s [ L ] + n u m s [ R ] sum=nums[i]+nums[L]+nums[R] s u m = n u m s [ i ] + n u m s [ L ] + n u m s [ R ] ,之后根据 s

算法刻意练习-LeetCode实战05-最接近的三数之和

谁说我不能喝 提交于 2020-03-05 10:23:32
题目:最接近的三数之和 链接:(https://leetcode-cn.com/problems/3sum-closest/) 这道题与自己昨天写的“三数之和”很像,但是个人觉得比其要简单。因为没有了特判与消除相同元素的工作,所以并不复杂。 个人的思路是这样的:用一个变量ans来记录与target的差值,然后利用双指针不断判断三数之和与target的差值的绝对值,小于ans绝对值的话更新ans即可。代码如下: class Solution { public : int threeSumClosest ( vector < int > & nums , int target ) { sort ( nums . begin ( ) , nums . end ( ) ) ; int ans = 1000000 ; int len = nums . size ( ) ; for ( int i = 0 ; i < len - 2 ; i ++ ) { int L = i + 1 , R = len - 1 ; while ( L < R ) { int sum = nums [ i ] + nums [ L ] + nums [ R ] ; if ( sum == target ) return target ; else if ( sum < target ) { if ( target

刷题__2_二维数组中的查找

为君一笑 提交于 2020-03-05 07:14:47
1.描述: 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30] ] 给定 target = 5 ,返回 true。 给定 t arget = 20 ,返回 false。 2.想法: 仔细地观察会发现该矩阵有一个特点,就是任选一数字,同一列中比该数大的在它的下方,同一行比该数小的在它的前方,于是我们可以从右上角开始变换行或者列来找寻该数。 3.答题: 第一次答题: class Solution ( object ) : def findNumberIn2DArray ( self , matrix , target ) : """ :type matrix: List[List[int]] :type target: int :rtype: bool """ m = len ( matrix [ 0 ] ) n = len ( matrix ) column = m - 1 row = 0 while row <=

leetcode_1_两数之和

不打扰是莪最后的温柔 提交于 2020-03-05 06:56:54
题目 分析 看到查找某个数时,就应该考虑哈希。 借助java中的HashMap可以快速找到这两个整数。 代码 class Solution { public int [ ] twoSum ( int [ ] nums , int target ) { Map < Integer , Integer > map = new HashMap < > ( ) ; for ( int i = 0 ; i < nums . length ; i ++ ) { if ( map . containsKey ( target - nums [ i ] ) ) return new int [ ] { map . get ( target - nums [ i ] ) , i } ; map . put ( nums [ i ] , i ) ; } throw new IllegalArgumentException ( "Input error" ) ; } } 来源: CSDN 作者: 也想一个人去旅行 链接: https://blog.csdn.net/xiangfeihuanjue/article/details/104608836