1. 程式人生 > >給定一個數組,陣列中有正有負,求出連續陣列中和值最大的數(陣列長度大於等於1)

給定一個數組,陣列中有正有負,求出連續陣列中和值最大的數(陣列長度大於等於1)

刷牛牛客遇到的題,想給出完整而又簡潔的function(python解答,但是關鍵是思想,語言不是問題啦)

1.給定一個數組,陣列中有正有負,求出連續

(全部都是正的時候,所有值累加就是最大值)

(全部為負的時候,max(array)就是我們想要的)

# -*- coding:utf-8 -*-
#import numpy 
class Solution:
    def FindGreatestSumOfSubArray(self, array):
        length =len(array)
        result =[]
        sort_max = []
        #1.全是正數的情況
        #2.全是負數的情況 
        #3.有正有負的情況
        for i in range(length-1): 
            for j in range(i+1,length): 
                result.append(sum(array[i:j]))
            #全部為正時,所有累加起來就是最大的    
            result.append(sum(array))
            #sort_ = sorted(result,reverse=False)
            #找出最大值
            sort_ = max(result)
            #把每次得到的最大值存放在sort_max中
            sort_max.append(sort_)
        return max(sort_max)       

2.從1-n 的正整數中出現 1 的次數:

例如 n = 11, 則 1,10,11 就出現了4次1(11算作兩次,同理,111算作三次)

這裡就是找出一個數學規律,這樣時間複雜度最低

可以推廣到任意數X:

 1 - 10,在它們的個位數中,任意的 X 都出現了 1 次。  1 -100,在它們的十位數中,任意的 X 都出現了 10 次。 1 -1000,在它們的百位數中,任意的 X 都出現了 100 次。1-10000,在它們的千位數中,任意的 X 都出現了 100 次。

........

1-10的i次方,在它的右邊數第i 位,任意的 X 都出現了 10的(i-1)次。

程式碼實現如下:

# -*- coding:utf-8 -*-
#import numpy
from  math import*
class Solution:
    def NumberOf1Between1AndN_Solution(self, n):
        #找數學規律
        #n為負數(此題不考慮,它說了是非負整數)
        #if n < 0:
        #   return 0
        result=0
        tmp=n
        base=1
        while tmp:
            last=tmp%10
            tmp=tmp//10
            result+=tmp*base
            if last==1:
                result+=n%base+1
            elif last>1:
                result+=base
            base*=10
        return result  

相關推薦

給定個數陣列連續陣列中和大的數陣列長度大於等於1

刷牛牛客遇到的題,想給出完整而又簡潔的function(python解答,但是關鍵是思想,語言不是問題啦)1.給定一個數組,陣列中有正有負,求出連續(全部都是正的時候,所有值累加就是最大值)(全部為負的時候,max(array)就是我們想要的)# -*- coding:utf

給定個數陣列負數所有字陣列中和大的

/**當我們加上一個正數時,和會增加;當我們加上一個負數時,和會減少。如果當前得到的和是個負數,那麼這個和在接下來的累加中應該拋棄並重新清零, 不然的話這個負數將會減少接下來的和 */ public static int maxSum(int[] a) { int

給定個數個數該數不一定在陣列從數裡刪掉這個數字返回剩下的陣列長度

給定一個數組和一個數(該數不一定在陣列中),從數組裡刪掉這個數字,返回剩下的陣列長度。 如:A[] = {1, 2, 3, 4, 5}要刪除數字 3,那麼返回陣列長度為 4。 親愛的小夥伴們,題目是不是很簡單呢? 提示:int removeElement(int

自己的程式碼--題目:給定一個數組,裡面全是整數。數字大小表示這多可以向後移動幾個節點。總是從陣列第一個元素開始移動。問如何移動可以以最少步數移動到最後一個節點。

原文:https://yq.aliyun.com/articles/547799 描述: 題目:給定一個數組,裡面全是正整數。數字大小表示這一步最多可以向後移動幾個節點。總是從陣列第一個元素開始移動。問如何移動,可以以最少步數移動到最後一個節點。 例如:[3,4,2

面試題:給定個數陣列只包含0和1。請找到一個長的子序列其中0和1的數量是相同的

這個題目,看起來比較簡單,一些同學可能認為題目的描述符合動態規劃的特徵,然後就開始用動態規劃解,努力找狀態轉移方程。這些同學的感覺,是很正確的。但,找狀態轉移方程,我們要對原來的陣列進行變換一下。 原來是0和1的串,我們將0都換為-1。這樣題目目標就變成,找到一個最長的子串,子串數字和是0。設原陣列為A

java__給定個數個數該數不一定在陣列從數裡刪掉這個數字返回剩下的陣列長度

import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner

c++給定個數 nums編寫一個函式將所有 0 移動到陣列的末尾同時保持非零元素的相對順序

新建一個等長全為0的向量,遍歷目標向量,不是0就輸入進去 class Solution { public: void moveZeroes(vector<int>& nums) { vector<int> result(nums.size(

給定個數根據陣列陣列長度

題目:給定一個數組名字,如何根據陣列名求陣列的長度? 本題來自於一個同學筆試題,筆試中是實現一個氣泡排序,但是排序的引數只有一個數組名,沒有陣列中元素的個數;void bubbleSort(int a

給定個數返回大子陣列的累加和並且返回該子陣列

給定一個數組Arr,返回子陣列的最大累加和 例如 arr[] = {1,-2,3,5,-2,6,-1};所有子陣列中,[3,5,-2,6] 可以累加出最大和12 函式在設計的時候,應該考慮傳入的陣列Arr,同時要有一個傳出陣列,返回值會最大累加和,為整數 以下是程式碼

給定個數陣列缺少的小的整數

題目使這樣的:請設計一個高效演算法,查詢陣列中未出現的最小正整數。 給定一個整數陣列A,請返回陣列中未出現的最小正整數。 測試樣例: [-1,2,3,4] 返回1 一看到這個題目我想到的是用另外的一個數組B,長度為A的長度+1,來儲存遍歷陣列A的數的值。 if(A[i]

給定個數按序排列陣列若干個數使得這若干個數字的和與M最為接近揹包問題

思路:對於陣列中的每一個數,觀察它們取或不取對最後結果的影響。並且記錄下若干數字的和與M的差的絕對值最小時所取到的若干數字。 /*  * 微軟100, 9月28題, 輸入和接近M  * sum 即為M值  * num排序的陣列  * len陣列長度  * vec所取到若干數

給定個數陣列元素的排列和組合——Java實現

1. 思路 組合數C(n,m)和全排列A(n,n)可以通過遞迴的方式,直接實現。 而A(n,m)則可以通過組合數和全排列間接求出A(n,m)=C(n,m)*A(m,m),即對得到的組合數中的每個元素進行全排列 2. Java實現 package com.zfy.test

給定個數這個和大的連續陣列的和

將這個連續子陣列分為兩部分,一個是字首,一個是後一個元素,要使這個連續子陣列最大,那麼它的字首肯定不能為負,不然這個字首對即將加上的值就無意義,用一個max記錄最大值,每次當前綴加上後一個元素的時候判斷和是否大於max,大於則更新max,再判斷和是否小於0,小於0則將字首更

【Python】給定個數A[0,…,n-1]A的連續陣列使得該子陣列的和

最大子陣列 給定一個數組A[0,…,n-1],求A的連續子陣列,使得該子陣列的和最大。 例如陣列: 1, -2, 3, 10, -4, 7, 2, -5 最大子陣列:3, 10, -4, 7, 2 演算法分析 定義:字首和sum[i

給定個數 nums 和一個 val你需要原地移除所有數值等於 val 的元素返回移除後陣列的新長度

class Solution { public: int removeElement(vector<int>& nums, int val); }; int Solution

題目三:給定個數可以為和0請返回累加和為給定k的長子陣列長度

import java.util.HashMap; /** * * 2、給定一個數組,值可以為正、負和0,請返回累加和為給定值k的最長子陣列長度。 * 咱們可以反推,比如:1- 100,陣列和為1000. * 要求最長和為300的子陣列,我可以反著求第一

題目四:給定個數可以為和0請返回累加和小於等於k的長子陣列長度。 時間複雜度:O(n)

import java.util.HashMap; /** * * 3、給定一個數組,值可以為正、負和0,請返回累加和小於等於k的最長子陣列長度。 時間複雜度:O(n) * * 這裡需要分為兩步,第一步是獲取,以每個位置開頭最小和的長度。第二步,從0到N逐

給定個數其中出現奇數次的元素

package com.yzcl.test; public class JiShu { public static void main(String[] args) { //給定一個含有n個元素的整型陣列a,例如{1,1,2,4,3,3,1},找出其中出現奇數次的元素,並列印,輸出:1,

給定個數其中只有個數出現別的數都出現3次個數(go)

1.思路 用兩個數one=0、two=0分別記錄bits位上1出現的次數,如果一個數出現一次,則one等於這個數,two=0;  如果一個數出現兩次,則two等於這個數, one等於0;如果一個數出現第三次,則one = 0, two = 0 ,three等於這個數。 我們以陣