#Java数组练习题
1.两数之和
- 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。 示例 1: 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为
nums[0] + nums[1] == 9 ,返回 [0, 1] 。 示例 2:输入:nums = [3,2,4],
target = 6 输出:[1,2] 示例 3:输入:nums = [3,3], target = 6 输出:[0,1]
提示:
2 <= nums.length <= 104 -109 <= nums[i] <= 109 -109 <= target <= 109 只会存在一个有效答案
package com.wyy.arrays;
public class Solution {
public int[] TwoSum(int[] nums,int target){
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums.length; j++) {
if (nums[i]+nums[j]==target){
return new int[]{i, j};
}
}
}
//给系统返回一个值,防止找不到返回值使得java编译报错
return new int[0];
}
public static void main(String[] args) {
Solution solution = new Solution();
int[] nums = {2,7,11,15};
int target = 9;
int[] ints = solution.TwoSum(nums, target);
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
}
}
2.两数相加
给出两个 非空 的链表用来表示两个非负的整数。
其中,它们各自的位数是按照逆序的方式存储的,
并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一
个新的链表来表示它们的和。
package com.wyy.arrays;
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
public class ListNode {
int val;
ListNode next;
ListNode() {
}
ListNode(int val) {
this.val = val;
}
ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
public static void main(String[] args) {
ListNode listNode = new ListNode();
}
}
class Solution02 {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode n1 = new ListNode(0);
ListNode n2 = n1;
int carry = 0;
while(l1 != null || l2 != null || carry != 0) {
int l1Val = l1 != null ? l1.val : 0;
int l2Val = l2 != null ? l2.val : 0;
int sumVal = l1Val + l2Val + carry;
carry = sumVal / 10;
ListNode sumNode = new ListNode(sumVal % 10);
n2.next = sumNode;
n2 = sumNode;
if(l1 != null) l1 = l1.next;
if(l2 != null) l2 = l2.next;
}
return n1.next;
}
}
3. 无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:输入: s = “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2:
输入: s = “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。 示例 3:
输入: s = “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。 示例 4:输入: s = “” 输出: 0
提示:
0 <= s.length <= 5 * 104 s 由英文字母、数字、符号和空格组成
package com.wyy.arrays;
public class Solution03 {
public int lengthOfLongestSubstring(String s) {
int[] n = new int[128];
for (int i = 0; i < 128; i++) {
n[i] = -1;
}
int res = 0;
int start = 0;
for (int j = 0; j < s.length(); j++) {
int index = s.charAt(j);
start = Math.max(start, n[index] + 1);
res = Math.max(res, j - start + 1);
n[index] = j;
}
return res;
}
public static void main(String[] args) {
System.out.println(new Solution03().lengthOfLongestSubstring("asd"));
}
}