zoukankan      html  css  js  c++  java
  • 疑难杂题--编程

    1、最大子序和

        // 当前数小于0, 跳过, 因为会对后面的和产生不好的影响
        public int maxSubArray(int[] nums) {
            int curNum = nums[0];
            int sum = nums[0];
            for (int i = 1; i < nums.length; i++) {
                if (curNum < 0) {
                    curNum = nums[i];
                } else {
                    curNum += nums[i];
                }
    
                if (curNum > sum) {
                    sum = curNum;
                }
            }
            return sum;
        }
    

    2、最长回文子串

        public String longestPalindrome(String s) {
            char[] array = s.toCharArray();
            int length = array.length;
            if (length == 1) {
                return s;
            }
    
            int winSize = length;
            while (winSize >= 1) {
                int left = 0;
                do {
                    if (valid(array, left, left + winSize - 1)) {
                        return s.substring(left, left + winSize);
                    }
                    left++;
                } while (left + winSize <= length);
    
                winSize--;
            }
    
            return "";
        }
    
        private boolean valid(char[] array, int left, int right) {
            while (left <= right) {
                if (array[left] != array[right]) {
                    return false;
                }
                left++;
                right--;
            }
            return true;
        }
    

    3、二叉树最近公共祖先

    class Solution {
    
    	private TreeNode result;
    
        public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
            if (root == null || p == null || q == null) {
            	return null;
    		}
    
            this.helper(root, p.val, q.val);
            return result;
        }
    
        private boolean helper(TreeNode node, int valP, int valQ) {
    		if (node == null) {
    			return false;
    		}
    
    		boolean left = helper(node.left, valP, valQ);
    		boolean right = helper(node.right, valP, valQ);
    		if ((left && right) || ((node.val == valP || node.val == valQ) && (left || right))) {
    			result = node;
    		}
    		return left || right || (node.val == valP || node.val == valQ);
    	}
    }
    

    4、二分法求立方根

        private static double func(double num) {
            if (num < 0) {
                return (-1) * func(-num);
            }
            if (num == 0 || num == 1) {
                return num;
            }
    
            double i = (num > 1) ? 1 : 0;
            double j = (num > 1) ? num : 1;
            while (j - i > 0.001) {
                double mid = (i + j) / 2;
                if (mid * mid * mid == num) {
                    return mid;
                }
    
                if (mid * mid * mid < num) {
                    i = mid;
                } else {
                    j = mid;
                }
            }
            return j;
        }
    心有猛虎,细嗅蔷薇
  • 相关阅读:
    Linux安装svn
    spring低版本报错:java.lang.IllegalStateException: Context namespace element ‘annotation-config’ and its parser class [*] are only available on
    linux下nproc的作用
    Oracle存储过程--案例
    Oracle存储过程
    LoadRunner 11 安装
    BZOJ 1061 志愿者招募(最小费用最大流)
    ZOJ 1015 Fishing Net(判断弦图)
    BZOJ 1049 数字序列(LIS)
    topcoder srm 620 div1
  • 原文地址:https://www.cnblogs.com/sniffs/p/15342430.html
Copyright © 2011-2022 走看看