今天刷了几道 leetcode 的题目 ,记录一下 人家 的想法 ,帮助自己成长。
1. two sum:
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
我用的是 两个loop,感觉很傻逼 ,一个 possible answer用的是一个map 就解决了,感觉蛮smart
public int[] twoSum(int[] numbers, int target) { int[] result = new int[2]; Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (int i = 0; i < numbers.length; i++) {
if (map.containsKey(target - numbers[i])) {
result[1] = i + 1; result[0] = map.get(target - numbers[i]); return result; }
map.put(numbers[i], i + 1);
} return result; }
2. Add two numbers(还需要思考)
You are given two non-empty linked lists representing two non-negative integers. 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.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode c1 = l1; ListNode c2 = l2;
ListNode sentinel = new ListNode(0); ListNode d = sentinel;
int sum = 0; while (c1 != null || c2 != null) {
sum /= 10;
if (c1 != null) { sum += c1.val;
c1 = c1.next;
} if (c2 != null) { sum += c2.val;
c2 = c2.next;
} d.next = new ListNode(sum % 10); d = d.next; }
if (sum / 10 == 1) d.next = new ListNode(1);
return sentinel.next; } }
3.
Given a string, find the length of the longest substring without repeating characters.
Examples:
Given "abcabcbb"
, the answer is "abc"
,
which the length is 3.
Given "bbbbb"
, the answer is "b"
,
with the length of 1.
Given "pwwkew"
, the answer is "wke"
,
with the length of 3. Note that the answer must be a substring, "pwke"
is
a subsequence and not a substring.
基本上我写出来的和这个一样,不过 不同的是,我没用math.max
public int lengthOfLongestSubstring(String s) { if (s.length()==0) return 0; HashMap<Character, Integer> map = new HashMap<Character, Integer>(); int max=0; for (int i=0, j=0; i<s.length(); ++i){ if (map.containsKey(s.charAt(i))){ j =
Math.max(j,map.get(s.charAt(i))+1);
} map.put(s.charAt(i),i); max = Math.max(max,i-j+1); } return max; }