• LeetCode 2


    No1

      

    Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.

    You may assume no duplicates in the array.

    个人:

    public int searchInsert(int[] nums, int target) {
    		for(int i=0;i<nums.length;i++){
    			if(nums[i]>=target){
    				return i;
    			}
    		}
    		return nums.length;
    
    	}
    

      优秀代码: public int searchInsert(int[] A, int target) {        int low = 0, high = A.length-1;

            while(low<=high){
                int mid = (low+high)/2;
                if(A[mid] == target) return mid;
                else if(A[mid] > target) high = mid-1;
                else low = mid+1;
            }
            return low;
        }




    No2

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.

    Note:
    You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The number of elements initialized in nums1 and nums2 are m and n respectively.



      public void merge(int[] nums1, int m, int[] nums2, int n) {
    		int length=m+n-1,x=m-1,y=n-1;
    		while(x>-1 && y>-1){
    			nums1[length--] = (nums1[x]>nums2[y]) ? nums1[x--] : nums2[y--];
    		}
    		while(y>-1){
    			nums1[length--]=nums2[y--];
    		}
    	}
    

      

    No3 

      Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.

      For example,
      "A man, a plan, a canal: Panama" is a palindrome.
      "race a car" is not a palindrome.

      Note:
      Have you consider that the string might be empty? This is a good question to ask during an interview.

      For the purpose of this problem, we define empty string as valid palindrome.

      

      

    public static boolean isPalindrome(String s) {
    		char[] str=s.toLowerCase().toCharArray();
    		StringBuilder stringBuilder=new StringBuilder();
    		for(int i=0;i<str.length;i++){
    			if(Character.isLetterOrDigit(str[i])&&str[i]!=' '){
    				stringBuilder.append(str[i]);
    			}
    		}
    		str=stringBuilder.toString().toCharArray();
    		if(str.length<=1)return true;
    		int start=0;
    		int length=str.length-1;
    
    		while(start<length){
    			if(str[start]!=str[length]){
    				return false;
    			}else {
    				start++;
    				length--;
    			}
    		}
    		if(start>=length) return true;
    		return false;
    	}
    

      

    public static boolean isPalindrome(String s) {
    		String str=s.replaceAll("[^A-Za-z0-9]","").toLowerCase();
    		String stringBUffer=new StringBuffer(str).reverse().toString();
    		return str.equals(stringBUffer);
    	}
    

      

     No3 

      Given a binary tree, find its maximum depth.

      The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.

          

    public int maxDepth(TreeNode root) {
            if(root==null){
                return 0;
            }
            return 1+Math.max(maxDepth(root.left),maxDepth(root.right));
        }
    

      小心得:在求有一定规律结构时 可用递归去实现  而不用每个分支都储存 然后求size  。很屎的想法

     
    No4 

    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.
     
    	public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    		ListNode p1 = l1, p2 = l2;
    		ListNode result = new ListNode(0);
    		ListNode pk=result;
    		int c = 0;
    		while (p1 != null || p2 != null || c == 1) {
    			int num1 =( p1 == null ? 0 : p1.val);
    			int num2 =( p2 == null ? 0 : p2.val);
    			int k = num1 + num2 + c;
    			c = k / 10;
    			pk.next = new ListNode(k % 10);
    			pk = pk.next;
    			if (p1 != null) {p1 = p1.next;}
    			if (p2 != null) {p2 = p2.next;}
    		}
    		return result.next;//不能反回pk.next;   pk仅将指针只想result的堆  所以数据还存在result指向的堆  否则报错
    	}
    
    
    

      

    
    
  • 相关阅读:
    2017年8月21日 星期一 --出埃及记 Exodus 28:43
    2017年8月20日 星期日 --出埃及记 Exodus 28:42
    2017年8月19日 星期六 --出埃及记 Exodus 28:41
    2017年8月18日 星期五 --出埃及记 Exodus 28:40
    2017年8月17日 星期四 --出埃及记 Exodus 28:39
    2017年8月16日 星期三 --出埃及记 Exodus 28:38
    2017年8月15日 星期二 --出埃及记 Exodus 28:37
    2017年8月14日 星期一 --出埃及记 Exodus 28:36
    2017年8月13日 星期日 --出埃及记 Exodus 28:35
    2017年8月12日 星期六 --出埃及记 Exodus 28:34
  • 原文地址:https://www.cnblogs.com/KingIceMou/p/7825626.html
Copyright © 2020-2023  润新知