leetcode360. 有序轉化數組

給你一個已經?排好序?的整數數組?nums?和整數?a、b、c。對于數組中的每一個數 x,計算函數值?f(x) = ax2 + bx + c,請將函數值產生的數組返回。

要注意,返回的這個數組必須按照 升序排列,并且我們所期望的解法時間復雜度為?O(n)。

示例 1:

輸入: nums = [-4,-2,2,4], a = 1, b = 3, c = 5
輸出: [3,9,15,33]
示例 2:

輸入: nums = [-4,-2,2,4], a = -1, b = 3, c = 5
輸出: [-23,-5,1,7]

思路:

先判斷是否為二次函數。

如果是,再判斷開口的上下,根據和對稱軸點的距離來判斷函數值的大小,走雙指針的邏輯。

class Solution {public int[] sortTransformedArray(int[] nums, int a, int b, int c) {int len=nums.length;int[] ans=new int[len];if(a==0){if(b>0){for(int i=0;i<len;i++){ans[i]=b*nums[i]+c;}}else{for(int i=0;i<len;i++){ans[i]=b*nums[len-i-1]+c;}}}else if(a>0){double mid = -b * 1.0 / a / 2;int start=0;int end=len-1;int index=len-1;while(start<=end){if(Math.abs(mid-nums[start])>Math.abs(mid-nums[end])){ans[index--]=a*nums[start]*nums[start]+b*nums[start]+c;start++;}else{ans[index--]=a*nums[end]*nums[end]+b*nums[end]+c;end--;}}}else{double mid = -b * 1.0 / a / 2;int start=0;int end=len-1;int index=0;while(start<=end){if(Math.abs(mid-nums[start])>Math.abs(mid-nums[end])){ans[index++]=a*nums[start]*nums[start]+b*nums[start]+c;start++;}else{ans[index++]=a*nums[end]*nums[end]+b*nums[end]+c;end--;}}}return ans;}
}

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444357.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444357.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444357.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++(STL):27 ---關聯式容器set源碼剖析

一、set set語法使用參閱:set的特性 set所有元素都會根據元素的鍵值自動被排序set中的鍵值就是實值,實值就是鍵值默認情況下set不允許兩個元素重復set的迭代器 不能根據set的迭代器改變set元素的值。因為其鍵值就是實值,實值就是鍵值,如果改變set元素值,會嚴重破壞set組織…

C++(STL):28 ---關聯式容器map用法

作為關聯式容器的一種,map 容器存儲的都是 pair 對象,也就是用 pair 類模板創建的鍵值對。其中,各個鍵值對的鍵和值可以是任意數據類型,包括 C++ 基本數據類型(int、double 等)、使用結構體或類自定義的類型。 通常情況下,map 容器中存儲的各個鍵值對都選用 string 字符…

C++(STL):26 ---關聯式容器set用法

set容器都會自行根據鍵的大小對存儲的鍵值對進行排序, 只不過 set 容器中各鍵值對的鍵 key 和值 value 是相等的,根據 key 排序,也就等價為根據 value 排序。 另外,使用 set 容器存儲的各個元素的值必須各不相同。更重要的是,從語法上講 set 容器并沒有強制對存儲元素的類…

leetcode387. 字符串中的第一個唯一字符

給定一個字符串&#xff0c;找到它的第一個不重復的字符&#xff0c;并返回它的索引。如果不存在&#xff0c;則返回 -1。 案例: s "leetcode" 返回 0. s "loveleetcode", 返回 2. 注意事項&#xff1a;您可以假定該字符串只包含小寫字母。 思路&…

C++(STL):30 ---關聯式容器map的operator[]和insert效率對比

通過前面的學習我們知道,map 容器模板類中提供有 operator[ ] 和 insert() 這 2 個成員方法,而值得一提的是,這 2 個方法具有相同的功能,它們既可以實現向 map 容器中添加新的鍵值對元素,也可以實現更新(修改)map 容器已存儲鍵值對的值。舉個例子(程序一): #include …

C++(STL):29 ---關聯式容器map 迭代器

無論是前面學習的序列式容器,還是關聯式容器,要想實現遍歷操作,就必須要用到該類型容器的迭代器。當然,map 容器也不例外。C++ STL 標準庫為 map 容器配備的是雙向迭代器(bidirectional iterator)。這意味著,map 容器迭代器只能進行 ++p、p++、--p、p--、*p 操作,并且迭…

C++(STL):35---multimap容器

在掌握 C++ STL map 容器的基礎上,本節再講一個和 map 相似的關聯式容器,即 multimap 容器。所謂“相似”,指的是 multimap 容器具有和 map 相同的特性,即 multimap 容器也用于存儲 pair<const K, T> 類型的鍵值對(其中 K 表示鍵的類型,T 表示值的類型),其中各個…

在Spring + Hibernate中使用二級緩存配置步驟

在SSH中用二級緩存大概分以下幾步&#xff1a; 1、首先在hbm文件里對涉及到的對象設置緩存方式&#xff0c;或根據情況設置自己需要的 2、在ehcache的配置文件里配置一個cache&#xff0c;name為這個類名 3、在applicationContext.xml的hibernate配置里 hibernate.cache.use_q…

C++(STL):34--- multiset容器詳解

前面章節中,對 set 容器做了詳細的講解。回憶一下,set 容器具有以下幾個特性: 不再以鍵值對的方式存儲數據,因為 set 容器專門用于存儲鍵和值相等的鍵值對,因此該容器中真正存儲的是各個鍵值對的值(value);set 容器在存儲數據時,會根據各元素值的大小對存儲的元素進行…

C++(STL):36---關聯式容器multiset、multimap源碼剖析

一、multiset multiset的特性以及用法和set完全相同,唯一的差別在于它允許鍵值重復,因此它的插入操作采用的是底層RB-tree的insert_equal()而非insert_unique() multiset源碼 //以下代碼摘錄于stl_multiset.htemplate <class _Key, class _Compare, class _Alloc>clas…

leetcode 455. 分發餅干

假設你是一位很棒的家長&#xff0c;想要給你的孩子們一些小餅干。但是&#xff0c;每個孩子最多只能給一塊餅干。對每個孩子 i &#xff0c;都有一個胃口值 gi &#xff0c;這是能讓孩子們滿足胃口的餅干的最小尺寸&#xff1b;并且每塊餅干 j &#xff0c;都有一個尺寸 sj 。…

C++(STL):33---hash_set、hash_map、hash_multiset、hash_multimap源碼剖析

這些關聯容器底層都是使用hash table實現的.一、hash_set 由于hash_set底層是以hash table實現的,因此hash_set只是簡單的調用hash table的方法即可與set的異同點:hash_set與set都是用來快速查找元素的但是set會對元素自動排序,而hash_set沒有hash_set和set的使用方法相同在…

leetcode402. 移掉K位數字

給定一個以字符串表示的非負整數 num&#xff0c;移除這個數中的 k 位數字&#xff0c;使得剩下的數字最小。 注意: num 的長度小于 10002 且 ≥ k。 num 不會包含任何前導零。 示例 1 : 輸入: num "1432219", k 3 輸出: "1219" 解釋: 移除掉三個數字…

C++:43---派生類向基類轉換、靜態/動態的類變量

一、繼承中類的類型轉換規則 我們普通的編程規則規定,如果我們想把引用或指針綁定到一個對象上,則引用或指針的類型必須與所綁定的對象的類型一致或者對象的類型含有一種可接受的const類型轉換規則。但是繼承關系中的類比較例外,其規則如下:①我們可以將基類的指針或引用綁…

C++:42---類的內存大小

一、類內存的特點 類內無任何成員變量時,默認為1字節類內成員遵循內存的對齊補齊規則(與結構體的對齊補齊一樣)函數不占內存(存在代碼段)有繼承關系時,父類的成員變量也屬于類內寸的一部分,但是C++標準并沒有明確規定派生類的對象在內存中如何分布(也就是說基類部分和派…

C++:40---繼承中類成員的變化關系

一、派生類繼承基類成員的規則 ①派生類繼承了基類的所有數據成員與函數(不論公有成員、保護成員、私有成員)②派生類雖然繼承了基類的所有成員,但是能不能訪問基類的成員還與父類成員的屬性(public、protected、private)以及繼承方式有關③類靜態成員:如果基類定義了一個靜…

C++:37---繼承概念、繼承種類

這篇文章不詳細分析繼承和不同繼承關系下的特點。 我將在后邊幾篇文章里專門針對繼承關系來做分析。 一、基類與派生類的概念 基類(父類):在繼承關系中處于上層的類派生類(子類):在繼承關系中處于下層的類class A;class B;class C:public A //C為A的子類,A為C的父類{};…

C++:41---覆蓋和隱藏

覆蓋(重寫) 概念: 基類的虛函數,如果派生類有相同的函數,則子類的方法覆蓋了父類的方法 隱藏 概念: 當子類定義出的“成員變量、方法”與父類的重名時,父類的會被隱藏重點:對于函數,基類定義了一些列的重載函數,在派生類中只要有一個同名的函數(即使參數列表不…

leetcode179. 最大數

給定一組非負整數&#xff0c;重新排列它們的順序使之組成一個最大的整數。 示例 1: 輸入: [10,2] 輸出: 210 示例 2: 輸入: [3,30,34,5,9] 輸出: 9534330 說明: 輸出結果可能非常大&#xff0c;所以你需要返回一個字符串而不是整數。 思路&#xff1a;貪心&#xff0c;對于…

C++:39---繼承中構造函數、析構函數的關系

一、繼承中構造函數的關系 如果父類沒有構造函數,則子類初始化時不需要構造父類如果父類有構造函數,則子類初始化自己的構造函數時,要先初始化父類的構造函數基類的構造函數必須在派生類的構造函數初始化列表來進行初始化總結:在構造自己(子類)之前,需要先構造父類演示案…