Battery Japan – EV應用搶眼

Battery Japan 2016 已進行了七年,雖然依舊是設備為主軸,但散布在其中的攤位中還是可見一些重要應用,根據集邦科技綠能事業部的觀察,除了固態電池之外,也包括了為數不少的車用電池模組系統商,讓參展應用顯得更多元化,尤其豐田旗下的專屬電池廠Primearth EV Energy 更是備受矚目。

已參展多屆的Eliiy power依然集中在鋰鐵電池,本次首次展出了在機車的應用,選擇該類應用的重點,還是在於彰顯該類電池的高安全與可靠性。看好家用儲能市場的發展所產生的多樣化需求,本次除了過去標榜的中大型儲能系統外,本次也展出了在家用小型儲能系統。

可撓式穿戴裝置近年大受消費市場的關注,固態電池供應商之一的Hitz也在本次展覽展出更精良的性能表現,目前該類產品的環境溫度已可承受-40~100度的高溫差,預料在工業相關應用將有機會率先導入。

Isabellenhütte Heusler 也是德國公司,本業專注在被動元件與銅質電池連接片,近來也跨足到連接片集成的應用(右下圖),透過高精度的溫度與電壓偵測,可滿足使用環境屬於路線不確定性較高的乘用車輛,提高駕駛對於車輛狀況的精確掌握。因位可提供客製化設計,該類產品目前已被歐洲Tier1 所採用,至於亞洲市場則是更關注在標準化集成元件的量產化進度。

FEV為德國驅動系統元件相關,主要提供車廠在投入PHEV所需的硬體,也因此客戶需求多集中在歐洲,解決車廠在驅動與儲能系統的工程問題,PHEV相較HEV需要更高的電池容量,且要兼容技有的引擎系統,在配置上以中置環境為首選。

Primearth EV Energy第一次參展覽,備受關注的原因除了是豐田注資外,90%的電池芯業務也是與豐田相關,本次展出了豐田HEV從鎳氫電池與鋰電池,都是屬於大功率輸出的系統,甚至是正在進行的FCEV也是由Primearth EV Energy所供應。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

台灣寄大陸海運貨物規則及重量限制?

大陸寄台灣海運費用試算一覽表

南投搬家前需注意的眉眉角角,別等搬了再說!

小白學 Python(24):Excel 基礎操作(下)

人生苦短,我選Python

前文傳送門

在這裏首先恭喜各位看到本篇連載的同學,本篇連載為 《小白學 Python 基礎系列》 最後一篇,恭喜各位在學習 Python 的道路上邁出了堅實的一大步。

寫入 Excel

首先當然是安裝第三方模塊:

pip install openpyxl

首先我們需要先創建一個 WorkBook :

import xlsxwriter

workbook = xlsxwriter.Workbook('demo.xlsx')

在所有操作之前,需要記得先導入我們剛才安裝的 xlsxwriter 的模塊。

接下來,我們創建一個 Sheet :

sheet1 = workbook.add_worksheet('test_sheet')

創建完成后,需要關閉 workbook ,這一步會將我們剛才創建的 workbook 進行保存。

workbook.close()

好了,我們已經創建好了一個 excel ,操作結束,下課。

老師,你回來,這就完了?

我們接着介紹如何將數據寫入至 Excel 中。

首先我們可以先設置一些的單元格的格式:

workfomat = workbook.add_format()
# 字體加粗
workfomat.set_bold(True)
# 單元格邊框寬度
workfomat.set_border(1)
# 對齊方式
workfomat.set_align('left')
# 格式化數據格式為小數點后兩位
workfomat.set_num_format('0.00')

然後我們將內容寫入,具體內容小編懶得想了,直接複製上一篇文章中的內容:

heads = ['', '語文', '數學', '英語']
datas = [
    ['小明', 76, 85, 95],
    ['小紅', 85, 58, 92],
    ['小王', 98, 96, 91]
]

sheet1.write_row('A1', heads, workfomat)

sheet1.write_row('A2', datas[0], workfomat)
sheet1.write_row('A3', datas[1], workfomat)
sheet1.write_row('A4', datas[2], workfomat)

然後執行程序,我們來看下最終輸出的結果:

除了可以這樣輸出以外,我們還可以指定輸出的單元格格式:

我們列舉一個比較複雜的輸出日期類型:

fomat1 = workbook.add_format({'num_format': 'yy/mm/dd/ hh:mm:ss'})

sheet1.write_datetime('E5', datetime.datetime(2019, 11, 9, 22, 44, 26), fomat1)

注意: 上面的格式化一定要加,否則在 Excel 中显示出來的只會是一個時間戳。

其他的輸出類型小編這裏就不一一舉例了,下面列出一些常用的:

# 字符串類型
sheet1.write_string()
# 数字型
sheet1.wirte_number()
# 空類型
sheet1.write_blank()
# 公式
sheet1.write_formula()
# 布爾型
sheet1.write_boolean()
# 超鏈接
sheet1.write_url()

我們還可以在 Excel 中插入圖片,樣例如下:

sheet1.insert_image('I6', 'wx.jpg')

語法如下:

insert_image(row, col, image[, options])

row:行坐標,起始索引值為0;
col:列坐標,起始索引值為0;
image:string類型,是圖片路徑;
options:dict類型,是可選參數,用於指定圖片位置,如URL等信息;

我們還可以在 Excel 中繪圖,支持包括面積、條形圖、柱狀圖、折線圖、散點圖等。

圖表對象是通過 Workbook add_chart() 方法創建的,其中指定了圖表類型:

chart = workbook.add_chart({'type': 'column'})

常見的圖表樣式如下:

area:面積樣式的圖表
bar:條形圖
column:柱狀圖
line:線條樣式的圖表
pie:餅形圖
scatter:散點圖
stock:股票樣式的圖表
radar:雷達樣式的圖表

然後使用 insert_chart() Worksheet方法將其作為嵌入的圖表插入到工作表中:

sheet1.insert_chart('A7', chart)

完整示例如下:

chart = workbook.add_chart({'type': 'column'})

chart.add_series({'values': '=test_sheet!$B$2:$B$4'})
chart.add_series({'values': '=test_sheet!$C$2:$C$4'})
chart.add_series({'values': '=test_sheet!$D$2:$D$4'})

sheet1.insert_chart('A7', chart)

結果如下:

一些常用的簡單的操作就介紹到這裏,想了解更多的同學可以訪問官方文檔,鏈接小編已經找出來了: 。

示例代碼

本系列的所有代碼小編都會放在代碼管理倉庫 Github 和 Gitee 上,方便大家取用。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

小三通海運與一般國際貿易有何不同?

小三通快遞通關作業有哪些?

AspNetCore熟練應用CancellationToken,CTO會對你刮目相看

背景

  已經有很多文章記錄了 web程序中採用異步編程的優勢和.Net異步編程的用法, 異步編程雖然不能解決查詢數據庫的瓶頸, 但是利用線程切換,能最大限度的彈性利用工作線程, 提高了web服務的響應能力。

  【 9012年了,再不會異步編程你是真老了】

       本文要說的是利用異步編程中的取消機制緩解數據庫的查詢瓶頸開發者只需在 MVC/WebAPI查詢方法體內關注CancllationToken並適時取消異步任務, 這將大大提高應用的響應能力。

頭腦風暴

  想象你請求某網站頁面,該頁面正閃着菊花試圖努力綻放(正在加載),最終你忍不了:

① F5刷新

② 轉向其他頁面

③ 點擊瀏覽器“停止”按鈕 

對於可憐的服務器,用戶快速刷新5次,服務器將被迫接受 5倍的工作量,這是因為即使用戶刷新了瀏覽器(或點擊停止按鈕), 雖然取消了原始瀏覽器請求,但是Web服務器並不Care,仍然按部就班處理進入HTTP pipeline的請求(MVC/WebAPI 中默認行為)。其他②③場景類似。

在異步編程中能向任務發出Cancllation信號,停止web服務器一切後端查詢行為。在.NET中,這是使用CancellationToken完成的:

  • 取消令牌的實例傳遞到異步任務

  • 異步任務監視令牌,以查看請求是否已經被取消。

  • 如果請求取消,則應停止執行正在執行的操作。.NET中的大多數異步方法將具有接受取消令牌的重載。

本文所說的請求是,耗時長的服務端讀取查詢(返回數據但不修改數據的查詢)。取消已修改數據的請求對於用程序可能不是一個好的選擇:

    –  是否真的要因用戶導航到應用程序中的另一個頁面而取消保存?也許可以,但也可能不會。

   –  除了數據問題,這也不會提高性能,因為數據庫服務器將需要回滾該事務,這可能是一項昂貴的操作。

AspNetCore實踐

P1  監測CancellationToken令牌

  訪問 MyReallySlowReport頁面,等待5s,最終他們放棄了,去了其他頁面:

 所有正在進行的請求都將被取消。

MVC/WebAPI能接受到取消請求的信號。開發者只需要在Controller Action中添加CancellationToken參數,並在後續行為中監測該取消信號。

瀏覽器取消請求時,AspNetCore根據自動將HttpContext.RequestAborted這個token綁定到Action的CancellationToken 參數,CancellationTokenModelBinder將會在調用AddMvc()或services.AddMvcCore()時被注入。​

public async Task<ActionResult> MyReallySlowReport(CancellationToken cancellationToken)
{
    List<ReportItem> items;
    using (ApplicationDbContext context = new ApplicationDbContext())
    {
        items = await context.ReportItems.ToListAsync(cancellationToken);
    }
    return View(items);
}

很容易取消SQL的查詢行為,因為上述EF的調用api支持取消異步操作; 對於自定義的長耗時查詢行為,可以使用CancllationToken的原生觸發用法:

public async Task<ActionResult> MyReallySlowReport(CancellationToken cancellationToken)
{
    List<ReportItem> items;
    using (ApplicationDbContext context = new ApplicationDbContext())
    {
        items = await context.ReportItems.ToListAsync(cancellationToken);
    }

    foreach (var item in items)
    {
        cancellationToken.ThrowIfCancellationRequested();
            // slow non-cancellable work
            Thread.Sleep(1000);
    }
    return View(items);
}

 P2  處理取消異步操作向上拋出的異常 

 Web服務器觸發取消信號,一般會向上會拋出 OperationCanceledException 或者 TaskCancellationException,所以為了記錄這種非常規異常,建議採用獨立的ExceptionFilter記錄。

public class OperationCancelledExceptionFilter : ExceptionFilterAttribute
{
    private readonly ILogger _logger;

    public OperationCancelledExceptionFilter(ILoggerFactory loggerFactory)
    {
        _logger = loggerFactory.CreateLogger<OperationCancelledExceptionFilter>();
    }
    public override void OnException(ExceptionContext context)
    {
        if(context.Exception is OperationCanceledException)
        {
            _logger.LogInformation("Request was cancelled");
            context.ExceptionHandled = true;
            context.Result = new StatusCodeResult(400);
        }
    }
}

P3  想要得到CTO的稱讚,可不是那麼簡單。

以上只是後端程序員利用取消機制緩解異步查詢瓶頸的後端操作,從web應用全流程角度思考,這個優化還能提升嗎?

> 以上是傳統的網頁請求場景,在取消請求時,瀏覽器幫助我們發起了Cancellation信號。 

> 想想日益常見的SPA程序(單頁面程序),絕大部分頁面請求都是Ajax請求,你點擊應用的另外一個“頁面(JS代碼維護頁面導航),瀏覽器不會自動取消請求。

所以在SPA應用中,要前端自行發出取消請求的信號

var xhr = $.get("/api/myslowreport", function(data){
  //show the data
});

//If the user navigates away from this page
xhr.abort() 

That‘s all ,前後端程序猿通力配合, 應用的吞吐量和響應能力極大提升, CTO要給各位加薪了。

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

台灣寄大陸海運貨物規則及重量限制?

大陸寄台灣海運費用試算一覽表

南投搬家前需注意的眉眉角角,別等搬了再說!

賓利「首款電動車」預告年中亮相 將掀層峰品牌電車大戰?

摘錄自2020年3月9日中央社報導

除了在四年前推出層峰休旅車Bentayga外,賓利(Bentley)現在也打算推出零排放的純電動車,預計在今年年中就會亮相,正式跨足電動車領域!

據《TopGear》報導,賓利總裁Adrian Hallmark證實,賓利將於今年年中推出首款量產電動車,並將提供Mulliner客製化項目。至於為何直到現在才推出電動產品,Hallmark則表示,電動車鋰電池的成本是傳統內燃機引擎的六倍,而內燃機也佔了車輛成本的20%,在如此昂貴的情況下,也使賓利相對較晚才推出電動車。不過,考量到未來五到六年內鋰電池將會更便宜、體積更小,屆時賓利也會推出軸距恰當、車格大小適中的電動產品。

賓利目前也已在生產過程達成「碳中和」,並有望成為VAG福斯汽車集團中,第一個實現碳中和的豪華品牌。

能源議題
國際新聞
電動車

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

小三通海運與一般國際貿易有何不同?

小三通快遞通關作業有哪些?

無懼疫情泰國市場仍售野味 專家憂成武漢第二

摘錄自2020年3月9日星島日報報導

新冠肺炎疫情蔓延至今,仍未有緩解跡象,甚至蔓延至世界各地。在疫情暴發初期,不少專家都認為病毒源於野味,更直指是因為武漢海鮮市場暗售的野味。近日,澳洲節目揭發,泰國市場有商人無懼疫情持續,仍出售蜥蜴、猴子、野貓等野味,市場環境更是惡劣,野生動物均被困在狹窄的籠子。專家擔憂,恐會成為第二個武漢,並直指是「沉睡定時炸彈」。

據澳洲Nine電視台節目《60 Minutes》報道,美國環境與人權調查員Steven Galster與記者早前走訪泰國曼谷的洽圖洽市場(Chatuchak Market),發現有商人仍出售野生動物,包括野貓、狐狸、狨猴、蛇、蜥蜴、烏龜及穿山甲等野生動物。

雖然中國已關閉逾2萬類似的市場,但仍有其他亞洲國家經營。Galster又指為遏制病毒,應該關閉所有非法的野生動物交易市場,阻止病毒擴散與復發。

食品安全
生活環境
國際新聞
泰國
武漢肺炎
野味
傳統市場

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

台灣寄大陸海運貨物規則及重量限制?

大陸寄台灣海運費用試算一覽表

台中搬家,彰化搬家,南投搬家前需注意的眉眉角角,別等搬了再說!

台灣特斯拉正式成軍,維修業務職缺首先釋出

台灣過去是電動車製造商特斯拉(Tesla)關鍵零件的生產基地,但目前如Model S 仍要透過代理商引進台灣。近日傳來好消息,特斯拉向北市府登記「台灣特斯拉汽車有限公司」已核准設立,完成進軍台灣的第一步。

台灣曾是特斯拉關鍵零件如電動馬達、電控系統的生產基地,供應鏈集中於台中、林口一帶,全盛時期有將近25% 的零組件來自台灣。特斯拉推出第一款電動跑車Tesla Roadster,就已經搭載台灣供應商的零組件。

特斯拉早在 2006 年6 月26 日由經濟部中部辦公室核准設立台灣特斯拉汽車有限公司,負責電動車內部重要的機電整合系統,並與台灣供應鏈密切合作。但原公司在2010年解散並清算完結,今年向台北市政府遞交申請。

由經濟部商業司的全國商工行政服務入口網,已能查詢特斯拉向北市府登記的公開資料,公司名稱為「台灣特斯拉汽車有限公司」,核准設立日期是2016年3 月16 日,營業事業包括汽車批發業、汽車零售業、國際貿易業、汽車修理業、租賃業等項目。

不只如此,該公司也在104 人力銀行刊登徵才資訊,是由中國特斯拉團隊著手籌備,截稿前已有11 個工作機會,需求人數逾20 人,多為銷售、維修等相關職缺。上述皆能看出特斯拉開始佈局台灣電動車市場,期待不久的將來特斯拉正式在台營運,建置充電網並銷售旗下車款。

本文授權轉載自《》──〈〉

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

小三通海運與一般國際貿易有何不同?

小三通快遞通關作業有哪些?

架構設計:”4+1″視圖

概念

“4+1”視圖,是指從5個不同視角來描述軟件體繫結構。
“4+1”分別指:

  1. 邏輯視圖
  2. 過程視圖
  3. 物理視圖
  4. 開發視圖
  5. 場景/用例 視圖

邏輯架構的描述可以圍繞前四個視圖進行組織,然後結合用例或場景進行說明,形成第五個視圖。

每個視圖只關心繫統的一個側面,5個視圖結合起來,才能反映系統的全部內容。

關於視圖

軟件設計可以從不同的概念角度進行描述和記錄,這些角度通常被稱為視圖。

“視圖表示軟件體繫結構的一部分,它显示軟件系統的特定屬性”

不同的視圖涉及與軟件相關的不同問題。

總之,軟件設計是由設計過程產生的多方面的產物,通常由相對獨立的正交視圖組成,可以結合建築視圖理解。

邏輯視圖

當使用面向對象的設計方法時,邏輯視圖對應設計的對象模型,常用描述方法有UML類圖、E-R圖。

邏輯架構主要支持功能需求,即系統應該為用戶提供什麼樣的服務。
系統被分解成一組關鍵抽象,以對象或對象類的形式從問題中表述。

類的設計遵循抽象、封裝和繼承的原則,這種分解不僅是為了進行功能分析,也是為了理清系統各個部分的通用機制和設計元素。

過程視圖

過程架構關注設計的併發和同步方面,考慮了一些非功能性需求,比如性能和可用性。
過程視圖可以在幾個抽象層次上進行描述,每個抽象層次處理不同的關注點:

  • 在最高層次上關注進程,進程分佈在由LAN或WAN連接的一組硬件資源上,作為一組獨立執行的通信程序邏輯網絡。
  • 多個邏輯網絡可以同時存在,共享相同的物理資源。

主要任務是通過一組定義良好的任務間通信機制進行通信:基於同步和異步消息的通信服務、遠程過程調用、事件廣播等。

次要任務是可以通過集合或共享內存進行通信,避免重大任務在同一過程或處理節點上進行配置假設。

物理視圖

物理視圖描述軟件到硬件的映射,主要反映在分佈式方面。

物理架構主要考慮系統的非功能性需求,如可用性、可靠性(容錯性)、性能(吞吐量)和可擴展性。

常見物理配置:

  • 測試
  • 為不同站點或不同客戶部署系統

開發視圖

開發視圖描述軟件在其開發環境中的靜態組織。

開發架構的重點:

  • 對軟件開發環境中實際軟件模塊進行組織
  • 將軟件打包成小的程序庫,或者打包成可以由一個或少量開發人員開發的子系統

系統的開發架構由模塊和子系統圖表示,表示成“導出”和“導入”關係。只有當軟件的所有元素都被識別之後,才能描述完整的開發架構。

在很大程度上,開發架構考慮發展的便利性、軟件管理、重用或通用性,以及工具集或編程語言施加的約束。

開發視圖是需求分配的基礎,便於開發團隊分配工作,有助於成本評估和提前計劃、監控項目進度、軟件重用、可移植性和安全性的推理。通過開發視圖,容易得出項目開發人員的分工配置。

實際應用中,開發視圖會在邏輯視圖的基礎上增加大量內容,比如大量接口、輔助類等。

場景/用例 視圖

架構的描述決策可以圍繞前四個視圖進行組織,然後由一些選定的用例或場景(成為第五個視圖)進行說明。

其他四個視圖中的元素,可以通過一些重要的場景或用例進行更好的展示,比如:

  • 構造更符合用例的實例
  • 描述一些關聯腳本,如對象之間或進程之間的交互

總結

並非所有的軟件架構都需要完整的“4+1”視圖。

無用的視圖可以從架構描述中省略,例如:

  • 如果只有一個處理器,則不需要物理視圖
  • 如果只有一個進程或程序,則不需要進程視圖
  • 對於非常小的系統,有可能邏輯視圖和開發視圖非常相似,不需要單獨描述

場景視圖在任何情況下都有用。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

小三通海運與一般國際貿易有何不同?

小三通快遞通關作業有哪些?

【算法】leetcode算法筆記:二叉樹,動態規劃和回溯法

前言

寫的比較匆忙,測試用例是能全部跑通的,不過考慮內存和效率的話,還有許多需要改進的地方,所以請多指教

在二叉樹中增加一行

題目描述

給定一個二叉樹,根節點為第1層,深度為 1。在其第 d 層追加一行值為 v 的節點。

添加規則:給定一個深度值 d (正整數),針對深度為 d-1 層的每一非空節點 N,為 N 創建兩個值為 v 的左子樹和右子樹。

將 N 原先的左子樹,連接為新節點 v 的左子樹;

將 N 原先的右子樹,連接為新節點 v 的右子樹。

如果 d 的值為 1,深度 d – 1 不存在,則創建一個新的根節點 v,原先的整棵樹將作為 v 的左子樹。

Example

Input: 
A binary tree as following:
       4
     /   \
    2     6
   / \   / 
  3   1 5   

v = 1

d = 2

Output: 
       4
      / \
     1   1
    /     \
   2       6
  / \     / 
 3   1   5  

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/add-one-row-to-tree

 
基本思想
二叉樹的先序遍歷   
代碼的基本結構
不是最終結構,而是大體的結構

/**
 * @param {number} cd:current depth,遞歸當前深度
 * @param {number} td:target depth, 目標深度
 */
var traversal = function (node, v, cd, td) {
    // 遞歸到目標深度,創建新節點並返回
  if (cd === td) {
    // return 新節點
  }
  // 向左子樹遞歸
  if (node.left) {
    node.left = traversal (node.left, v, cd + 1, td);
  }
  // 向右子樹遞歸
  if (node.right) {
    node.right = traversal (node.right, v, cd + 1, td);
  }
  // 返回舊節點
  return node;
};
/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @param {number} v
 * @param {number} d
 * @return {TreeNode}
 */
var addOneRow = function (root, v, td) {
    // 從根節點開始遞歸
  traversal (root, v, 1, td);
  return root;
};

 

 

具體分析
我們可以分類討論,分三種情況處理  
第1種情況:目標深度<=當前遞歸路徑的最大深度 
處理方法:val節點替換該目標深度對應的節點,並且

  • 如果目標節點原來是左子樹,那麼重置后目標節點是val節點的左子樹

  • 如果目標節點原來是右子樹,那麼重置后目標節點是val節點的右子樹

 

第2種情況:目標深度>當前遞歸路徑的最大深度
閱讀題目發現,有這麼一個描述:“輸入的深度值 d 的範圍是:[1,二叉樹最大深度 + 1]”
所以呢,當目標深度恰好比當前路徑的樹的深度再深一層時,處理方式是:
在最底下那一層節點的左右分支新增val節點

 

第3種情況:目標深度為1

我們再分析題意,題目里說:“如果 d 的值為 1,深度 d – 1 不存在,則創建一個新的根節點 v,原先的整棵樹將作為 v 的左子樹。”

這說明當:目標深度為1時,我們的處理方式是這樣的 

 

全部代碼 

/**
 * @param {v} val,插入節點攜帶的值
 * @param {cd} current depth,遞歸當前深度
 * @param {td} target depth, 目標深度
 * @param {isLeft}  判斷原目標深度的節點是在左子樹還是右子樹
 */
var traversal = function (node, v, cd, td, isLeft) {
  debugger;
  if (cd === td) {
    const newNode = new TreeNode (v);
    // 如果原來是左子樹,重置后目標節點還是在左子樹上,否則相反
    if (isLeft) {
      newNode.left = node;
    } else {
      newNode.right = node;
    }
    return newNode;
  }
  // 處理上述的第1和第2種情況
  if (node.left || (node.left === null && cd + 1 === td)) {
    node.left = traversal (node.left, v, cd + 1, td, true);
  }
  if (node.right || (node.right === null && cd + 1 === td)) {
    node.right = traversal (node.right, v, cd + 1, td, false);
  }
  return node;
};
/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @param {number} v
 * @param {number} d
 * @return {TreeNode}
 */
var addOneRow = function (root, v, td) {
  // 處理目標深度為1的情況,也就是上述的第3種情況
  if (td === 1) {
    const n = new TreeNode (v);
    n.left = root;
    return n;
  }
  traversal (root, v, 1, td);
  return root;
};

 

單詞拆分 

題目描述 

給定一個非空字符串 s 和一個包含非空單詞列表的字典 wordDict,判定 s 是否可以被空格拆分為一個或多個在字典中出現的單詞。

說明:

1.拆分時可以重複使用字典中的單詞。

2.你可以假設字典中沒有重複的單詞。

 

Example 

example1
輸入: s = "applepenapple", wordDict = ["apple", "pen"]
輸出: true
解釋: 返回 true 因為 "applepenapple" 可以被拆分成 "apple pen apple"。
注意: 你可以重複使用字典中的單詞。

example2
輸入: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"]
輸出: false

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/word-break

 

基本思想 

動態規劃

具體分析
動態規劃的關鍵點是:尋找狀態轉移方程
有了這個狀態轉移方程,我們就可以根據上一階段狀態和決策結果,去求出本階段的狀態和結果
然後,就可以從初始值,不斷遞推求出最終結果。
在這個問題里,我們使用一個一維數組來存放動態規劃過程的遞推數據
假設這個數組為dp,數組元素都為true或者false,
dp[N] 存放的是字符串s中從0到N截取的子串是否是“可拆分”的布爾值
讓我們從一個具體的中間場景出發來思考計算過程
假設我們有

wordDict = ['ab','cd','ef']
s ='abcdef'

並且假設目前我們已經得出了N=1到N=5的情況,而現在需要計算N=6的情況

或者說,我們已經求出了dp[1] 到dp[5]的布爾值,現在需要計算dp[6] = ?  
該怎麼計算呢?
現在新的字符f被加入到序列“abcde”的後面,如此以來,就新增了以下幾種6種需要計算的情況

A序列 + B序列
1.abcdef + ""
2.abcde + f
3.abcd + ef
4.abc + def
5.ab + cdef
6.a + bcdef
注意:當A可拆且B可拆時,則A+B也是可拆分的

 

從中我們不難發現兩點

  1. 當A可拆且B可拆時,則A+B也是可拆分的

  2. 這6種情況只要有一種組合序列是可拆分的,abcdef就一定是可拆的,也就得出dp[6] = true了

下面是根據根據已有的dp[1] 到dp[5]的布爾值,動態計算dp[6] 的過程

(注意只要計算到可拆,就可以break循環了)  
具體代碼

var initDp = function (len) {
  let dp = new Array (len + 1).fill (false);
  return dp;
};
/**
 * @param {string} s
 * @param {string[]} wordDict
 * @return {boolean}
 */
var wordBreak = function (s, wordDict) {
  // 處理空字符串
  if (s === '' && wordDict.indexOf ('') === -1) {
    return false;
  }
  const len = s.length;
  // 默認初始值全部為false
  const dp = initDp (len);
  const a = s.charAt (0);
  // 初始化動態規劃的初始值
  dp[0] = wordDict.indexOf (a) === -1 ? false : true;
  dp[1] = wordDict.indexOf (a) === -1 ? false : true;
  // i:end
  // j:start
  for (let i = 1; i < len; i++) {
    for (let j = 0; j <= i; j++) {
      // 序列[0,i] = 序列[0,j] + 序列[j,i]
      // preCanBreak表示序列[0,j]是否是可拆分的
      const preCanBreak = dp[j];
      // 截取序列[j,i]
      const str = s.slice (j, i + 1);
      // curCanBreak表示序列[j,i]是否是可拆分的
      const curCanBreak = wordDict.indexOf (str) !== -1;
      // 情況1: 序列[0,j]和序列[j,i]都可拆分,那麼序列[0,i]肯定也是可拆分的
      const flag1 = preCanBreak && curCanBreak;
      // 情況2: 序列[0,i]本身就存在於字典中,所以是可拆分的
      const flag2 = curCanBreak && j === 0;
      if (flag1 || flag2) {
        // 設置bool值,本輪計算結束
        dp[i + 1] = true;
        break;
      }
    }
  }
  // 返回最後結果
  return dp[len];
};

全排列 

題目描述

給定一個沒有重複数字的序列,返回其所有可能的全排列。

Example

輸入: [1,2,3]
輸出:
[
  [1,2,3],
  [1,3,2],
  [2,1,3],
  [2,3,1],
  [3,1,2],
  [3,2,1]
]

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/permutations

 

基本思想

回溯法

 

具體分析

  1. 深度優先搜索搞一波,index在遞歸中向前推進

  2. 當index等於數組長度的時候,結束遞歸,收集到results中(數組記得要深拷貝哦)

  3. 兩次数字交換的運用,計算出兩種情況

總結

想不通沒關係,套路一波就完事了 

具體代碼

var swap = function (nums, i, j) {
  const temp = nums[i];
  nums[i] = nums[j];
  nums[j] = temp;
};

var recursion = function (nums, results, index) {
  // 剪枝
  if (index >= nums.length) {
    results.push (nums.concat ());
    return;
  }
  // 初始化i為index
  for (let i = index; i < nums.length; i++) {
    // index 和 i交換??
    // 統計交換和沒交換的兩種情況
    swap (nums, index, i);
    recursion (nums, results, index + 1);
    swap (nums, index, i);
  }
};
/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var permute = function (nums) {
  const results = [];
  recursion (nums, results, 0);
  return results;
};

 

 

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

台灣寄大陸海運貨物規則及重量限制?

大陸寄台灣海運費用試算一覽表

台中搬家,彰化搬家,南投搬家前需注意的眉眉角角,別等搬了再說!

台廠商農作廢棄物製吸管 紐約參展進軍美東

摘錄自2020年03月14日世界新聞網全國報導

全球環保意識興起,紐約市也於本月開始禁用免費塑膠袋,來自台灣的鉅田潔淨技術公司以農作廢棄物,包括甘蔗渣、咖啡渣、竹子粉等材料,製成不含聚乳酸(PLA)的甘蔗吸管,以廢棄物循環再利用的環保概念,於過去幾年成功推廣至美西,如今希望藉由到紐約參加專業展覽,讓產品進軍美東地區。

據統計,全世界每年使用3700億支一次性塑膠吸管,今年首次至紐約參展的鉅田潔淨技術公司,推出的甘蔗吸管則是以循環再生經濟理念邁,以可再生材料作為原料製造,並訴求吸管能夠自然分解,確保地球有限的資源能以循環再生、永續方式被使用,形成一個友善的經濟及產業系統。

該公司業務經理楊量祺說,以目前美國市場,加州對於可分解吸管的接受度較高,紐約目前則是有部分店家開始使用環保吸管,普及度仍較低;甘蔗吸管雖然成本是一般塑膠吸管的六倍,但基於大眾環保意識抬頭,展覽期間仍有不低的詢問度。

公害污染
廢棄物
國際新聞
紐約
塑膠袋
吸管

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

小三通海運與一般國際貿易有何不同?

小三通快遞通關作業有哪些?

豬瘟疫情持續 日本沖繩阿古豬赴離島避難

摘錄自2020年03月15日中央通訊社日本報導

日本沖繩縣沖繩本島豬瘟(Classical Swine Fever,又稱典型豬瘟,不是非洲豬瘟)疫情未見平息,為避免當地特有種「阿古豬」被注射疫苗,決定送30隻純種阿古豬到離島避難。

豬對沖繩民眾來說是不可或缺的食材,號稱「除了聲音以外全部都可以吃」,其中的「阿古豬」大約在600年前從中國來到沖繩後,被視為沖繩特有種,肉質在全日本都相當受歡迎。

為了降低感染豬瘟風險。沖繩縣政府把未接種疫苗的30頭純種阿古豬列為隔離對象,送往久米島上已有的隔離設施避難。沖繩本島全數豬隻將被注射豬瘟疫苗,久米島的隔離措施只是為了避免讓阿古豬被接種疫苗的暫時性措施,最後計畫是在久米島及其他沖繩縣離島建設阿古豬專用設施,屆時會再度移動阿古豬。

豬瘟是一種對肉豬或野豬具高度傳染力的疾病,但不會傳染給人類。根據日本家畜傳染病預防法規定,只要養豬場發現豬隻感染豬瘟,就必須撲殺養豬場內所有豬隻。

永續發展
糧食
動物福利
經濟動物
國際新聞
沖繩
阿古豬
豬瘟

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

台灣寄大陸海運貨物規則及重量限制?

大陸寄台灣海運費用試算一覽表

台中搬家,彰化搬家,南投搬家前需注意的眉眉角角,別等搬了再說!