2022-3-3 剑指offer day21

题1:

JZ44 数字序列中某一位的数字

描述

数字以 0123456789101112131415... 的格式作为一个字符序列,在这个序列中第 2 位(从下标 0 开始计算)是 2 ,第 10 位是 1 ,第 13 位是 1 ,以此类题,请你输出第 n 位对应的数字。
 
数据范围: 0 \le n \le 10^9 \0n109 
 1 import java.util.*;
 2 
 3 
 4 public class Solution {
 5     /**
 6      * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 7      *
 8      * 
 9      * @param n int整型 
10      * @return int整型
11      */
12     public int findNthDigit (int n) {
13         // write code here
14         int[] arr={9,189,2889,38889,488889,5888889,68888889,788888889};
15         int index=-1;
16         if (n<10) return n;
17         while (index+1<=7&&n>arr[index+1]) index++;
18         if (index==8) {
19             n-=arr[7];
20         }else n-=arr[index];
21         int s=n/(index+2);
22         n-=s*(index+2);
23         int num=0,ans=0;
24         //System.out.print(n);
25         //System.out.print(s);
26         if (n==0) {
27             num=(int)Math.pow(10,index+1)+s-1;
28             ans=num%10;
29             //System.out.print(num);
30         }else {
31             num=(int)Math.pow(10,index+1)+s;
32             //System.out.println(num);
33             for (int i=0;i<index+2-n;i++) num=num/10;
34             ans=num%10;
35         }
36         //System.out.print(index);
37         return ans;
38     }
39 }

思路:找规律,先判断几位数,在具体找数的位数。

 

题2:

JZ42 连续子数组的最大和

描述

输入一个长度为n的整型数组array,数组中的一个或连续多个整数组成一个子数组,子数组最小长度为1。求所有子数组的和的最大值。
数据范围:
1 <= n <= 2\times10^51<=n<=2×105
-100 <= a[i] <= 100100<=a[i]<=100
要求:时间复杂度为 O(n)O(n),空间复杂度为 O(n)O(n)
进阶:时间复杂度为 O(n)O(n),空间复杂度为 O(1)O(1)
 
 1 public class Solution {
 2     public int FindGreatestSumOfSubArray(int[] array) {
 3         int ans=array[0];
 4         int f=array[0];
 5         for (int i=1;i<array.length;i++) {
 6             int temp=Math.max(array[i],f+array[i]);
 7             //System.out.println(temp);
 8             ans=Math.max(temp,ans);
 9             //System.out.println(ans);
10             f=temp;
11         }
12         return ans;
13     }
14 }

思路:动态规划,f表示以i结尾的子数组最大值。因为只跟前面的f有关,所以可以一个数代替。

 

posted on 2022-03-03 10:13  阿ming  阅读(26)  评论(0编辑  收藏  举报

导航