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;
        }
    心有猛虎,细嗅蔷薇
  • 相关阅读:
    JAVA实现加入收藏和设为首页---网摘
    oracle序列的创建和使用
    针对Eclipse闪退的两种解决方案
    Mavean多工程依赖项目
    Z_Tree的使用案例(出差地点的演示)
    JAVA将数字钱数转换为大写
    提交表单时,post方式无法提交(一种情况)
    HTML中字体的垂直排列
    按照拼音排序的SQL语句条件
    在jsp里调用out.flush()和response.flushBuffer()有什么区别
  • 原文地址:https://www.cnblogs.com/sniffs/p/15342430.html
Copyright © 2011-2022 走看看