leetcode: Array标签题整理

2Add 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.

Example

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.


方法1

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
			ListNode res = new ListNode(-1);//返回结果的头结点
			ListNode p = res;
			int sum=0;//对应位相加的和
			int digit=0;//进位值
			
			while(l1!=null||l2!=null||digit!=0)
			{
				int num1 = l1==null?0:l1.val;
				int num2 = l2==null?0:l2.val;
				sum = l1.val+l2.val+digit;
				//因为一个节点只能存一位所以取个位存入结果 十位的数字存入digit作为进位的数字
				p.next=new ListNode(sum%10);
				p=p.next;
				digit = sum/10;
				l1= l1==null?null:l1.next;
				l2= l2==null?null:l2.next;  
			
			}
			return res.next;
}

方法2

	public ListNode addTwoNumbers2(ListNode l1, ListNode l2) {
		ListNode res = new ListNode(-1);//返回结果的头结点
		ListNode p = res;
		int sum=0;//对应位相加的和
	
		
		while(l1!=null||l2!=null)
		{
			sum=sum/10;//上次运算的进位值
			if(l1!=null)
			{
				sum+=l1.val;
				l1=l1.next;
			}
			if(l2!=null)
			{
				sum+=l2.val;
				l1=l1.next;
			}
			p.next = new ListNode(sum%10);
			p=p.next;
		
		}
		if(sum/10==1)
		{
			p.next= new ListNode(sum/10);
			p=p.next;
		}
		return res.next;
}

3Longest Substring Without Repeating Characters

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.

找出最长且不带重复字符的字串长度

思路:创建一个Hash表用来存储字串

 public int lengthOfLongestSubstring(String s) {
		 int left  = 0;
		 int right = 0;
		 int len=0;
		 HashSet set = new HashSet<>();//存储字符用来判断字符有没有重复的
		 
		 while(right

153Sum

Given an array nums of n integers, are there elements abc in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

Note:

The solution set must not contain duplicate triplets.

Example:

Given array nums = [-1, 0, 1, 2, -1, -4],

A solution set is:
[
  [-1, 0, 1],
  [-1, -1, 2]
]


   public List> threeSum(int[] nums) {
                   Arrays.sort(nums);
		  List> list = new ArrayList<>();
		  for(int i=0;i(nums[left]+nums[right]))
					  {
						 left++;
					  }
					  else
					  {
						  right--;
					  }
				  }
			 }
			  
			 
		  }
		  return list;
    }

62Unique Paths

机器人走m行 n列的棋盘 每次只能向下或向右问共有多少种走法

 public int uniquePaths(int m, int n) {
          int[][] map = new int[m][n];
		  for(int i=0;i

162Find Peak Element

Example 1:

Input: nums = [1,2,3,1]
Output: 2
Explanation: 3 is a peak element and your function should return the index number 2.

Example 2:

Input: nums = [1,2,1,3,5,6,4]
Output: 1 or 5 
Explanation: Your function can return either index number 1 where the peak element is 2, 
             or index number 5 where the peak element is 6.

在数组中找任意一个拐点的索引 

  public int findPeakElementt(int[] nums) {
	      return getPeak(nums,0,nums.length);     
	  }
	  public int getPeak(int[] nums,int left,int right)
	  {
		  if(left==right) return left;
		  if(right-left==1)
		  {
			  if(nums[right]>nums[left]) return right;
			  return left;
		  }
		  else
		  {
		      int mid = (left+right)/2;
		      if(nums[left]nums[mid]&&nums[mid]>nums[right])
		      {
		    	  return getPeak(nums,left,mid-1);
		      }
		      else
		      {
		    	  return getPeak(nums,mid+1,right);
		      }
		  }
		 
	  }

209Minimum Size Subarray Sum

Given an array of n positive integers and a positive integer s, find the minimal length of a contiguous subarray of which the sum ≥ s. If there isn't one, return 0 instead.

Example: 

Input: s = 7, nums = [2,3,1,2,4,3]
Output: 2
Explanation: the subarray [4,3] has the minimal length under the problem constraint.

方法一

 public int minSubArrayLen(int s, int[] nums) {
         int left=0;
		  int right=0;
		  int sum=0;
		  int len=100000;
		 while(left<=right&&right=s)
			  {
				  len=Math.min(len,right-left);
				  left++;
				  right=left;
				  sum=0;
			  } 
			
			  
			  
			  
		  }
		  
		  return len==100000?0:len;
    }

方法2

 public int minSubArrayLen(int s, int[] nums) {
        if(nums==null|nums.length==0) return 0;
		  int left=0;
		  int right=0;
		  int sum=0;
		  int len=Integer.MAX_VALUE;
		  while(right=s)
			  {
				  len = Math.min(len, right-left);
				  sum-=nums[left++];
			  }
			  
		  }
		  
		  return len==Integer.MAX_VALUE?0:len;
    }


你可能感兴趣的:(leetcode)