1.两数之和
题目描述:给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例 1:
2 -> 4->3;
5->6->4;
返回结果:
7-> 0->8;
示例:
1 2 3
| 输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[7,0,8] 解释:342 + 465 = 807.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode prev = new ListNode(0); int carry = 0; ListNode cur = prev; while(l1!=null || l2!=null){ int x= l1 !=null ? l1.val : 0; int y = l2 !=null ? l2.val : 0; int sum = x + y + carry; carry = sum / 10; sum = sum % 10; cur.next = new ListNode(sum); cur = cur.next; if(l1 !=null){ l1 = l1.next; } if(l2 !=null){ l2 = l2.next; } } if(carry == 1){ cur.next = new ListNode(carry); } return prev.next; } }
|
2.给定一个字符串 s
,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: s = “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
题解:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| public int lengthOfLongestSubstring04(String s) { Map<Character, Integer> map = new HashMap<>(); int maxLen = 0; int left = 0; for (int i = 0; i < s.length(); i++) { char c = s.charAt(i);
if (map.containsKey(c)) { left = Math.max(left, map.get(c) + 1); } map.put(c, i); maxLen = Math.max(maxLen, i - left + 1); } return maxLen; }
|
题目描述:
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
示例 1:
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
示例 2:
输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| class Solution { public double findMedianSortedArrays(int[] nums1, int[] nums2) { int lenth1=nums1.length; int lenth2 = nums2.length; int[] nums3 = new int[lenth1+lenth2]; int i=0 ,j=0, k=0; while(i<lenth1 && j<lenth2){ if(nums1[i]<=nums2[j]){ nums3[k++]=nums1[i++]; }else{ nums3[k++]=nums2[j++]; } } while(i<lenth1) nums3[k++]=nums1[i++]; while(j<lenth2) nums3[k++]= nums2[j++]; if((lenth1+lenth2)%2==1){ return nums3[(lenth1+lenth2)/2]; }else{ double z= nums3[(lenth1+lenth2)/2]+nums3[(lenth1+lenth2)/2-1]; return z/2; } } }
|
给你一个字符串 s,找到 s 中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。
示例 2:
输入:s = “cbbd”
输出:“bb”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class Solution { public String longestPalindrome(String s) { String ans = ""; for(int i=0;i<s.length();i++){ int l = i-1; int r = i + 1; while(l >= 0 && r< s.length() && s.charAt(l)==s.charAt(r)){ l--; r++; } if(ans.length()< r- l -1) ans = s.substring(l+1,r); l = i; r = i + 1; while(l>=0 && r<s.length() && s.charAt(l)==s.charAt(r)){ l--; r++; } if(ans.length()<r-l-1) ans = s.substring(l+1,r); } return ans; } }
|