1~5

1. Two Sum

package leetcode;
import java.util.HashMap;
import java.util.Map;
public class twoSum {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> mymap = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
mymap.put(nums[i], i);
}
for (int i = 0; i < nums.length; i++) {
int result = target - nums[i];
// 判断一下不为重复
if (mymap.containsKey(result) && mymap.get(result) != i) {
return new int[] { i, mymap.get(result) };
}
}
// 表明向方法传递了一个不合法或不正确的参数
throw new IllegalArgumentException("No two sum solution");
}
}



2. Add Two Numbers

package leetcode;
public class addTwoNumbers {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode save = new ListNode(0);// 保存节点
ListNode p = l1;
ListNode q = l2;
ListNode cur = save;
int carry = 0;// 进位
while (p != null || q != null) {
int x = (p != null) ? p.val : 0;
int y = (q != null) ? q.val : 0;
int temp = carry + x + y;
cur.next = new ListNode(temp % 10);
carry = temp / 10;
cur = cur.next;
if (p != null)
p = p.next;
if (q != null)
q = q.next;
}
//如果多一位,就新加一位。
if (carry > 0) {
cur.next = new ListNode(carry);
}
return save.next;
}
}


3. Longest Substring Without Repeating Characters

package leetcode;
import java.util.HashSet;
import java.util.Set;
public class lengthOfLongestSubstring {
public int lengthOfLongestSubstring(String s) {
int len = s.length();
Set<Character> myset = new HashSet<>();
int result = 0;
int i = 0;// 起始位
int j = 0;// 结束位
while (i < len && j < len) {
if (!myset.contains(s.charAt(j))) {
myset.add(s.charAt(j++));
result = Math.max(result, j - i);
} else {
myset.remove(s.charAt(i++));
}
}
return result;
}
}


4. Median of Two Sorted Arrays

package leetcode;


/**
 * @author zlatan
 *
 */
public class findMedianSortedArrays {


public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int len1 = nums1.length;
int len2 = nums2.length;
int sum = len1 + len2;
if (sum % 2 == 0) {
return (sub(sum / 2 + 1, nums1, nums2, 0, 0) + sub(sum / 2, nums1, nums2, 0, 0)) / 2.0;
} else {
return sub(sum / 2 + 1, nums1, nums2, 0, 0);
}
}


public int sub(int p, int[] nums1, int[] nums2, int q1, int q2) {
int len1 = nums1.length;
int len2 = nums2.length;
if (q1 >= len1)
return nums2[q2 + p - 1];
if (q2 >= len2)
return nums1[q1 + p - 1];
// p=1的情况,就是找到的情况
if (p == 1)
return Math.min(nums1[q1], nums2[q2]);


int m1 = q1 + p / 2 - 1;
int m2 = q2 + p / 2 - 1;


int mid1 = m1 < len1 ? nums1[m1] : Integer.MAX_VALUE;
int mid2 = m2 < len2 ? nums2[m2] : Integer.MAX_VALUE;


if (mid1 < mid2) {
return sub(p - p / 2, nums1, nums2, m1 + 1, q2);
} else {
return sub(p - p / 2, nums1, nums2, q1, m2 + 1);
}
}
}



5. Longest Palindromic Substring

//Manacher算法
package leetcode;


public class longestPalindrome {
public String longestPalindrome(String s) {
StringBuilder newstr = new StringBuilder();
newstr.append("#");
for (int i = 0; i < s.length(); i++) {
newstr.append(s.charAt(i));
newstr.append("#");
}
int len = newstr.length();
int[] rad = new int[len];
// 右边界
int right = -1;
// 中心点
int id = -1;


for (int i = 0; i < len; i++) {
// 默认最小半径1
int r = 1;
if (i <= right) {
r = Math.min(right - i, rad[2 * id - i]);
}
// 自增
while (i - r >= 0 && i + r < len && newstr.charAt(i - r) == newstr.charAt(i + r)) {
r++;
}
// 更新右边界和中心坐标
if (i + r - 1 > right) {
right = i + r - 1;
id = i;
}
rad[i] = r;
}
int maxLen = 0;
int center = 0;
for (int i = 1; i < rad.length - 1; i++) {
if (rad[i] > maxLen) {
maxLen = rad[i];
center = i;
}
}
StringBuilder sbd = new StringBuilder();
int start = center - maxLen + 1;
for (int i = 0; i < 2 * maxLen - 1; i++) {
if (newstr.charAt(start + i) != '#')
sbd.append(newstr.charAt(start + i));
}
return sbd.toString();
}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值