leetcode 1_2_3_7
来自lknny.com,欢迎交流学习!点击
tags: [leetcode,algorithm]
categories: algorithm
Two Sum
Given an array of integers, find two numbers such that they add up to a specific target number.
The function twoSum should return indices of the two numbers such that they add up to the target,
where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based.
You may assume that each input would have exactly one solution.
大意:*寻找一个序列中的2个数字,使其相加等于targe,并输出这2个数字的index*
Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2
思路:
数字和下标,首选hashmap;
选择数字作为key值,方面通过get()得到value即index
key值重复情况的影响,仅仅出现在2个key相等并正好加上等于targe
但是,把put()方法放到判断之后,就不会出现这种情况了。因为在存入hashmap之前,index已经知道~
public int[] twoSum(int[] nums, int target)
{
HashMap<Integer,Integer> result=new HashMap<Integer,Integer>();
for(int i=0;i<nums.length;i++)
{
if(result.containsKey(target-nums[i]))
{
return new int[]{result.get(target-nums[i])+1,i+1};
}
else
result.put(nums[i], i);
}
return null;
}
HashMap<V,T> 泛型,所以int等基础类型不可!
HashMap允许key值重复,实际上是对相同key值的value覆盖,hashmap.put(1,2);hashmap.put(1,3);那么1.value=3.
get();通过key得到value.
EOF 1;
Add Two Numbers
You are given two linked lists representing two non-negative numbers.
The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
大意:2个链表,逆序存放数字,求和。如下例子,342+465=807.结果也是逆序输出.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
思路:
其实看懂了题目,感觉还是挺人性化的题目=。=,要是正序输出,岂不是还要逆转链表..
题目把咱正常的加法运算,右侧相加,向左进位,变成左侧相加,向右进位
从链表最左侧相加,有进位就进1(相加最多进位1),把当前相加结果%10添加到输出链表,当前相加结果/10进位到下位相加
public ListNode addTwoNumbers(ListNode l1, ListNode l2)
{
ListNode resultListNode=new ListNode(0);
>>>>pListNode指向resultListNode,做输出用
ListNode pListNode=resultListNode;
int flag=0;
while(l1!=null||l2!=null)
{
if(l1!=null)
{
flag+=l1.val;
l1=l1.next;
}
if (l2!=null)
{
flag+=l2.val;
l2=l2.next;
}
resultListNode.next=new ListNode(flag%10);
>>>>new完节点,然后指向之.....我写的时候忘了=!=..
resultListNode=resultListNode.next;
flag/=10;
}
>>>>while_loop完后,flag有可能还有进位,比如555+555,所以最后还要判断下!显然if(true)flag==1;
if (flag!=0)
{
resultListNode.next=new ListNode(flag);
}
return pListNode.next;
}
EOF 2;
Longest Substring Without Repeating Characters
Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc",which the length is 3. For "bbbbb" the longest substring is "b", with the length of 1.
大意:寻找字符串中无重复字符的最长字串
思路:
最长字串肯定是连续的:也就是找2个相同字符之间的长度;还要注意abba这种情况,主游标,和副游标,必然不能回退!
public int lengthOfLongestSubstring(String s) {
{
if (0==s.length()) return 0;
HashMap<Character, Integer> hashMap=new HashMap<Character, Integer>();
int max=0;
for(int i=0,j=0;i<s.length();i++)
{
if(hashMap.containsKey(s.charAt(i)))
{
>>防止副游标j回退,我又没想到....=。=<<
j=Math.max(hashMap.get(s.charAt(i))+1,j);
}
hashMap.put(s.charAt(i), i);
max=Math.max(max, i-j+1);
}
return max;
}
EOF 3;
Reverse Integer
Reverse digits of an integer. Example1: x = 123, return 321; Example2: x = -123, return -321
思路:
定于为Easy的题目,居然Test Case还包含了越界的情况,我也真是醉了....
public int reverse(int x)
{
if (x==0) return 0;
long num=0;
while(x!=0)
{
num=num*10+x%10;
if (num>Integer.MAX_VALUE||num<Integer.MIN_VALUE) {
return 0;
}
x/=10;
}
return Integer.parseInt(num+"");
}
注意:
| 类型 | Max Value | 备注 |
|---|---|---|
| int | 2147483647 | int最大21亿多点..10位数 |
| long | 9223372036854775807 | long最大19位 |
| double | 1.7976931348623157E308 | double好大 |
任何类型出现越界,不是error就是乱输出,这是常识!Integer.parseInt(num+"");屡试不爽!
我用了long类型,来判断越界情况,1234567899逆转妥妥越界,但是本身并不越界。这是本题需要考虑的case!
leetcode某大神,利用越界后int数字混乱(无规律),通过简单的运算,进行了判断!
int tail = x % 10;
int newResult = result * 10 + tail;
if ((newResult - tail) / 10 != result)
{ return 0; }
EOF 7;
leetcode 1_2_3_7的更多相关文章
- 我为什么要写LeetCode的博客?
# 增强学习成果 有一个研究成果,在学习中传授他人知识和讨论是最高效的做法,而看书则是最低效的做法(具体研究成果没找到地址).我写LeetCode博客主要目的是增强学习成果.当然,我也想出名,然而不知 ...
- LeetCode All in One 题目讲解汇总(持续更新中...)
终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 477 Total Hamming Distance ...
- [LeetCode] Longest Substring with At Least K Repeating Characters 至少有K个重复字符的最长子字符串
Find the length of the longest substring T of a given string (consists of lowercase letters only) su ...
- Leetcode 笔记 113 - Path Sum II
题目链接:Path Sum II | LeetCode OJ Given a binary tree and a sum, find all root-to-leaf paths where each ...
- Leetcode 笔记 112 - Path Sum
题目链接:Path Sum | LeetCode OJ Given a binary tree and a sum, determine if the tree has a root-to-leaf ...
- Leetcode 笔记 110 - Balanced Binary Tree
题目链接:Balanced Binary Tree | LeetCode OJ Given a binary tree, determine if it is height-balanced. For ...
- Leetcode 笔记 100 - Same Tree
题目链接:Same Tree | LeetCode OJ Given two binary trees, write a function to check if they are equal or ...
- Leetcode 笔记 99 - Recover Binary Search Tree
题目链接:Recover Binary Search Tree | LeetCode OJ Two elements of a binary search tree (BST) are swapped ...
- Leetcode 笔记 98 - Validate Binary Search Tree
题目链接:Validate Binary Search Tree | LeetCode OJ Given a binary tree, determine if it is a valid binar ...
随机推荐
- atom 折腾记(转载的)
http://www.bkjia.com/webzh/999078.html
- POJ 2388(排序)
http://poj.org/problem?id=2388 题意:就N个数的中位数. 思路:用快排就行了.但我没用快排,我自己写了一个堆来做这个题.主要还是因为堆不怎么会,这个拿来练练手. #inc ...
- 在win7-64bit环境下,boa-constructor 0.6.1 的palette面板中没有控件图标的解决方法
在win7-64bit环境下,boa-constructor 0.6.1 的palette面板中没有控件图标,空白一片.将面板窗口拉大,发现那些图标在很下面的位置,X轴的排列与正常状态一致. 软件环境 ...
- flume与kafka整合
flume与kafka整合 前提: flume安装和测试通过,可参考:http://www.cnblogs.com/rwxwsblog/p/5800300.html kafka安装和测试通过,可参考: ...
- CEF3开发者系列之类和接口
CEF3基本的框架包含C/C++程 序接口,通过本地库的接口来实现,而这个库则会隔离宿主程序和 Chromium&Webkit的操作细节.它在浏览器控件和宿主程序之间提供紧密的整合,它支持用户 ...
- Java中使用Collections.sort()方法对数字和字符串泛型的LIst进行排序
在List的排序中常用的是Collections.sort()方法,可以对String类型和Integer类型泛型的List集合进行排序. 首先演示sort()方法对Integer类型泛型的List排 ...
- Java web 开发环境搭建
1.下载jdk-8u60-windows-i586.exe;安装过程会让指定jre的安装路径,此处最好指定和jdk安装一个目录下(D:\Program Files\Java\jdk1.8.0_60,D ...
- Python 开发轻量级爬虫01
Python 开发轻量级爬虫 (imooc总结01--课程目标) 课程目标:掌握开发轻量级爬虫 为什么说是轻量级的呢?因为一个复杂的爬虫需要考虑的问题场景非常多,比如有些网页需要用户登录了以后才能够访 ...
- linux下动态链接库解决方案(一)
1.c++无法直接调用用c写的动态链接库,如果调用的话可能需要用到一些交叉编译的知识: 2.在c++写的动态链接库无法被调用成功的反思: 在linux下,通常都是使用g++编译器("g++ ...
- 【vs2010调试】当前不会命中断点 源代码与原始版本不同
解决方案:全选CPP文件内容,选择 “编辑”-“高级”-“设置选定内容的格式”,保存,重新编译.