剑指Offer Day14 2020-03-09

1.连续子数组和最大值

题目描述
输入一个整型数组,数组里有正数也有负数。数组中一个或连续多个整数组成一个子数组。求所有子数组的和的最大值,要求时间复杂度为O(n)。例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和。

public class Solution {
    boolean flag = true;
    public int FindGreatestSumOfSubArray(int[] array) {
        int len = 0;
        if (array == null || (len = array.length) == 0) {
            flag = false;
            return -1;
        }
        int result = array[0];
        int max_result = result;
        for (int i = 1; i < len; i++) {
            if (result + array[i] < array[i]) {
                result = array[i];
            } else {
                result += array[i];
            }
            if (result > max_result) {
                max_result = result;
            }
        }
        return max_result;
    }
}

注意数组所有数都为负数的情况,也就是 result > max_result 时的赋值位置。

2.整数中1出现的次数(从1到n整数中1出现的次数)

题目描述
输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11和12,1一共出现了5次。

public class Solution {
    public int NumberOf1Between1AndN_Solution(int n) {
        if (n < 0) return 0;
        int count = 0;
        while (n != 0) {
            char[] ch = String.valueOf(n).toCharArray();
            for (int i = 0; i < ch.length; i++) {
                if (ch[i] == '1') {
                    count++;
                } 
            }
            n--;
        }
        return count;
    }
}

注意char数组中查找每一项直接使用ch[i],不用花里胡哨的charAt和indexOf

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 8,704评论 0 2
  • 下面代码的输出是什么 因为sizeof(data1)是求数组的大小,每个整数占4个字节;第二个是因为指针占8个字节...
    世界上的一道风阅读 2,744评论 0 0
  • 1.二维数组的查找 题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一...
    少年梦游计_3403阅读 4,860评论 0 1
  • 说明: 本文中出现的所有算法题皆来自牛客网-剑指Offer在线编程题,在此只是作为转载和记录,用于本人学习使用,不...
    秋意思寒阅读 4,836评论 1 1
  • 1.二维数组的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从...
    linjiason阅读 4,014评论 0 0