zoukankan      html  css  js  c++  java
  • 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指向的堆  否则报错
    	}
    
    
    

      

    
    
  • 相关阅读:
    YARN架构设计详解
    HDFS文件上传
    HDFS Namenode启动过程
    (转)计算机原理学习(1)-- 冯诺依曼体系和CPU工作原理
    (转)python之from_bytes、to_bytes
    (转)Python3入门之线程threading常用方法
    (转)Python3.5 queue模块详解
    (转) argparse — 解析命令参数和选项
    (转)Python3之pickle模块
    (转)linux用户态和内核态理解
  • 原文地址:https://www.cnblogs.com/KingIceMou/p/7825626.html
Copyright © 2011-2022 走看看