給定一個按非遞減順序排序的整數陣列 A,返回每個數字的平方組成的新陣列,要求也按非遞減順序排序。
題目
給定一個按非遞減順序排序的整數陣列 A,返回每個數字的平方組成的新陣列,要求也按非遞減順序排序。
示例 1:
輸入:[-4,-1,0,3,10]
輸出:[0,1,9,16,100]
示例 2:
輸入:[-7,-3,2,3,11]
輸出:[4,9,9,49,121]
提示:
1 <= A.length <= 10000
-10000 <= A[i] <= 10000
A 已按非遞減順序排序。
思路
情況①
陣列裡的元素都是非負數。
這種情況就比較好解決了,直接按順序把每個元素平方輸出就行。
情況②
陣列裡的元素都是非正數。
這種情況也比較好解決,直接按逆序把每個元素平方輸出就行。
情況③
陣列裡有正數也有負數。
這種情況就比較複雜了。
首先,原陣列有序,要得結果也是有序的,但原陣列裡的元素有正有負,而結果要的順序是 元素平方之後的順序,也就是原陣列元素絕對值的順序。
看成左右兩個陣列:
把前後兩個陣列都進行 “平方” 處理
把問題轉換成:兩個有序陣列拼接成一個有序陣列
這樣我們就利用上了原陣列有序的條件,儘量利用我們有的條件,才能達到最優解。
程式碼
public void fun(int[] num){
if (num.length == 1){//只有一個元素的話,直接平方輸出
System.out.print("[ ");
System.out.print(num[0]*num[0]);
System.out.print("]");
return;
}
if (num[0]<0){//如果第一個數小於零
int zero = -1;
for (int i = 0;i < num.length;i++){
if (num[i] > 0){
//尋找第一個大於 0 的元素
zero = i;
break;
}
}
if (zero == -1){//說明沒有大於0的元素(全是負數)
//直接逆序輸出
System.out.print ("[ ");
for (int i = num.length-1;i>=0;i--){
System.out.print(num[i]*num[i]+" ");
}
System.out.print ("]");
return;
}
//生成 結果陣列
List<Integer> list = new ArrayList<>();
int left = zero-1;
int right = zero;
int count = num.length;
while (count>0) {
if ((num[left] * num[left]) > (num[right] * num[right])) {
list.add(num[right] * num[right]);
if (right<(num.length-1)){
right++;
}
count--;
if (count == 1) {
list.add(num[left] * num[left]);
count--;
}
} else {
list.add(num[left] * num[left]);
if (left>0){
left--;
}
count--;
if (count == 1) {
list.add(num[right] * num[right]);
count--;
}
}
}
System.out.print ("[ ");
for (int a:list){
System.out.print(a+" ");
}
System.out.print ("]");
}else {//說明第一個數也不小於零(全是正數)
//直接平方輸出
System.out.print ("[ ");
for (int a:num){
System.out.print(a*a+" ");
}
System.out.print ("]");
}
}
測試:
int[] arr = {-4,-2,0,1,3};
fun(arr);
結果:
[ 0 1 4 9 16 ]
That’s all,Thank you!!!
相關文章
- 給定一個排序陣列和一個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。排序陣列索引
- LeetCode - 1389 - 按既定順序建立目標陣列LeetCode陣列
- 按照陣列順序給物件重新組合成新物件陣列物件
- MySQL按指定順序排序(order by field的使用)MySql排序
- js 漢字陣列按拼音排序JS陣列排序
- 給定陣列按要求生成樹陣列
- laravel 按照whereIn中給定陣列順序輸出Laravel陣列
- Python中按字母順序對列表排序Python排序
- PHP 多維陣列排序-按某個 key 的值PHP陣列排序
- 調整陣列元素順序演算法陣列演算法
- 輸入一個非負整數,返回組成它的數字之和
- 給定一個整數陣列,找出總和最大的連續數列,並返回總和。陣列
- 陣列物件按物件某個屬性排序陣列物件排序
- JavaScript 陣列順序打亂JavaScript陣列
- PHP 二維陣列, 按某一個欄位排序PHP陣列排序
- 【劍指Offer】調整陣列順序使奇數位於偶數前面陣列
- JZ-013-調整陣列順序使奇數位於偶數前面陣列
- 面試題21:調整陣列順序奇數位於偶數前面面試題陣列
- 找到無序陣列中最小的k個數陣列
- python實現給定一個數和陣列,求陣列中兩數之和為給定的數Python陣列
- 為什麼處理排序的陣列要比非排序的快排序陣列
- 順序跳躍顯示陣列中的值陣列
- 記一個TS 列舉順序的坑
- PHP 實現按奇偶排序陣列PHP排序陣列
- 【LeetCode】905.按奇偶排序陣列LeetCode排序陣列
- 順序表的堆排序排序
- LeetCode-兩個排序陣列的中位數LeetCode排序陣列
- 4. 兩個排序陣列的中位數排序陣列
- 給定一個整數陣列 nums 和一個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。陣列
- 輸入三個數按從大到小的順序輸出
- 劍指 Offer 21. 調整陣列順序使奇數位於偶數前面陣列
- 第三章:查詢與排序(下)------------- 3.8題解_調整陣列順序-奇數在左偶數在右排序陣列
- 陣列中每個陣列元素出現的次數陣列
- [每日一題] 第十一題:調整陣列順序使奇數位於偶數前面每日一題陣列
- 在一個給定的陣列中查詢陣列中的最大元素是否至少是陣列中每個其他數字的兩倍, 如果是,則返回最大元素的索引,否則返回-1。陣列索引
- MySQL 按指定 ID 順序返回結果MySql
- Mysql按指定 ID 順序返回結果MySql
- 刷題系列 - 合併兩個順序佇列為一個新的佇列佇列