1.  Container With Most Water

Given n non-negative integers a1a2, ..., an, where each represents a point at coordinate (iai). n vertical lines are drawn such that the two endpoints of line i is at (iai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.

Note: You may not slant the container and n is at least 2.

思路:可以遍历线条所有两两组合的情况来解,但是复杂度回达到O(n2),超时。采用另一种方法,从数组两端的点a1和an开始考虑,先计算a1和an所构成的Area,也就是a1和an中最短的那根线乘以a1到an x轴上的距离。然后开始往中间考虑,途中记录最大的Area。具体做法是,以a1 和 an为例,同时往左往右考虑,抛弃其中较短的线,因为对于a1和an中的较短者来说,x轴上的距离现在是最大了,也就是说不管剩下的那些线条比这个较短者(a1或者an)长还是短(因为装多少水取决于短板),所构成的Area都不会比原来a1和an构成的Area要大,所以在这个求最大Area的过程中可以直接将这个较短者剔除,移动至a2或者a(n-1)。再重复此步骤,每一步得到的Area都要和最大Area比较以实时更新。

详细见:https://leetcode.com/problems/container-with-most-water/solution/

import java.util.*;

public class LeetCode{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String input=sc.nextLine(); int[] nums=new int[input.length()];
for(int i=0;i<input.length();i++){
nums[i]=input.charAt(i)-'0';
}
} public static int maxArea(int[] height) {
int maxarea = 0, l = 0, r = height.length - 1;
while (l < r) {
maxarea = Math.max(maxarea, Math.min(height[l], height[r]) * (r - l));
if (height[l] < height[r])
l++;
else
r--;
}
return maxarea;
}
}

2. 3Sum Closest

Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.

For example, given array S = {-1 2 1 -4}, and target = 1.

The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

解析:模仿3Sum那题的思路即可。

import java.util.*;

public class LeetCode{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String input=sc.nextLine();
int n=sc.nextInt(); String[] str=input.split(",| ");
int[] nums=new int[str.length];
for(int i=0;i<str.length;i++){
     // Integer.ParseInt() 方法将String转为int
nums[i]=Integer.parseInt(str[i]);
}
System.out.println(closet(nums,n));
} public static int closet(int[] nums,int target) {
Arrays.sort(nums);
   // Integer.MAX_VALUE
int closet=Integer.MAX_VALUE;
int closet_sum=0;
for(int i=0;i<nums.length-2;i++){
int l=i+1,r=nums.length-1;
while(l<r){
int sum=nums[i]+nums[l]+nums[r];
        // 利用 Math.abs()方法求绝对值
if(Math.abs(sum-target)<closet){
closet=Math.abs(sum-target);
closet_sum=sum;
}
if(sum-target>0)
r--;
else
l++;
}
}
return closet_sum;
}
}

3. Letter Combinations of a Phone Number

Given a digit string, return all possible letter combinations that the number could represent. A mapping of digit to letters (just like on the telephone buttons) is given below.

Input:Digit string "23"
Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

思路:利用先进先出队列构造所有可能的组合,一开始进队列的应该是一个字母,进完后出队,每个与另一组中的字母组合成2个,进队,进完后再出队,与另一组中的字母组合构成3个,进队再出队,以此类推。

import java.util.*;

public class LeetCode{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String digits=sc.nextLine();
List<String> letters=letterCombinations(digits);
for(String s:letters)
System.out.println(s);
} public static List<String> letterCombinations(String digits) {
   // LinkedList 实现了 Queue 接口和 List 接口,能当作队列来用
LinkedList<String> letters=new LinkedList<String>();
   // 数组下标对应于输入的数字,值是数字对应的键盘上的字母
String[] mapping=new String[]{"0", "1", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
   // 这里先往队列添个东西,因为空队列 remove 方法会抛异常
letters.add("");
for(int i=0;i<digits.length();i++){
int x=digits.charAt(i)-'0';
     // 这里是个较难理解的点,i(digits的char索引,从0开始)和队列中目前的字母组合的长度(也就是1个字母还是2个字母或者0个字母空队列的情况)对应
while(letters.peek().length()==i){
String s=letters.remove();
for(char c:mapping[x].toCharArray()){
letters.add(s+c);
}
}
}
return letters;
}
}

LeetCode解题报告—— Container With Most Water & 3Sum Closest & Letter Combinations of a Phone Number的更多相关文章

  1. Leetcode之回溯法专题-17. 电话号码的字母组合(Letter Combinations of a Phone Number)

    [Leetcode]17. 电话号码的字母组合(Letter Combinations of a Phone Number) 题目描述: 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组 ...

  2. LeetCode 解题报告索引

    最近在准备找工作的算法题,刷刷LeetCode,以下是我的解题报告索引,每一题几乎都有详细的说明,供各位码农参考.根据我自己做的进度持续更新中......                        ...

  3. leetcode面试准备:Container With Most Water

    leetcode面试准备:Container With Most Water 1 题目 Given n non-negative integers a1, a2, ..., an, where eac ...

  4. LeetCode解题报告:Linked List Cycle && Linked List Cycle II

    LeetCode解题报告:Linked List Cycle && Linked List Cycle II 1题目 Linked List Cycle Given a linked ...

  5. leetcode解题报告(2):Remove Duplicates from Sorted ArrayII

    描述 Follow up for "Remove Duplicates": What if duplicates are allowed at most twice? For ex ...

  6. LeetCode解题报告汇总! All in One!

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 把自己刷过的所有题目做一个整理,并且用简洁的语言概括了一下思路,汇总成了一个表格. 题目 ...

  7. [LeetCode][Python]17: Letter Combinations of a Phone Number

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 17: Letter Combinations of a Phone Numb ...

  8. 《LeetBook》leetcode题解(17):Letter Combinations of a Phone Number[M]

    我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...

  9. Letter Combinations of a Phone Number - LeetCode

    目录 题目链接 注意点 解法 小结 题目链接 Letter Combinations of a Phone Number - LeetCode 注意点 可以不用按字典序排序 解法 解法一:输入的数字逐 ...

随机推荐

  1. 有序数列第K小

    有序数列第K小 题目描述 给出两个长度分别为\(n,m\)的单调非递减数列,求出它们合并后的第\(k\)小值. 输入输出格式 输入格式: 第一行三个数,\(n,m,k\)如题意所述: 第二行\(n\) ...

  2. React setState和修改props触发的钩子

    1. setState的改变会触发4个生命周期钩子 shouldComponentUpdatecomponentWillUpdaterendercomponentDidUpdate 2. props的 ...

  3. 2-17作业 数据库和shell综合练习

    1. 使用shell把“12306用户名和密码库-不要使用记事本打开会卡死-解压后可使用word或ultraedit打开.rar”中的所有记录成生sql语句,然后把sql导入数据库,成一个uPwd_1 ...

  4. linux内存管理及手动释放机制

    inux系统中查看内存状态一般都会用到free linux的free命令中,cached和buffers的区别 Free Mem:表示物理内存统计 -/+ buffers/cached:表示物理内存的 ...

  5. JN5169 --------- zigbee代码

    队列: 需要创建3个标准队列(只创建不使用): ------Queue with handle zps_msgMlmeDcfmInd to receive IEEE 802.15.4 MACcomma ...

  6. 分析一个贴图社交app的失败原因:FORK(相机)

    FORK(相机)是一个通过分享图片来建立社交的app,它有着鲜明的配色,还算不错的贴图创新,细腻的产品设计,但是由于产品定位不清晰.设计亮点不多以及推广不利,从2014年5月第一版开始就没有火过.所以 ...

  7. 基于tcp交互的python聊天程序

    语言:Python 工具:MySQL,Tkinter,图灵机器人 功能:图形聊天工具,可以选择自动回复或者人工回复. 注意:如果运行需要自建mysql数据库表.还有安装各种模块.还有到“图灵机器人”申 ...

  8. C#中static void Main(string[] args)的含义

    static:是将main方法声明为静态的. void:说明main方法不会返回任何内容. String[]args:这是用来接收命令行传入的参数,String[]是声明args是可以存储字符串数组. ...

  9. JS如何判断是不是iphoneX

    function isIphoneX(){ return /iphone/gi.test(navigator.userAgent) && (screen.height == 812 & ...

  10. AndroidStudio下加入百度地图的使用(一)——环境搭建

    AndroidStudio下加入百度地图的使用(一)--环境搭建 最近有学生要做毕业设计,会使用到定位及地图信息的功能,特此研究了一下,供大家参考,百度定位SDK已经更新到了5.0,地图SDK已经更新 ...