Leetcode程式紀錄

Numbers With Equal Digit Sum

簡單說明:給定一個陣列(array),該array裡面皆為數字組成,每個數字的位數間做總和,相同的成一組。每組至少兩個數字或以上,如果沒有,則不算成組,若全部都沒有成組,則回傳一個-1;若有成組,則將該組最大與次大的兩個數字做加總,比較其他組看誰的加總最大,便回傳該值。
example
A=[51,71,17,42], the function should return 93. There are two pairs of numbers whose digits add up to an equal sum: (51, 42) and (17,71). The first pair sums up to 93.
B=[42,33,60], the function should return 102. The digits of all numbers in A add up to the same sum, and choosing to add 42 and 60 gives the result 102.
C=[51,32,43], the function should return -1, since all numbers in A have digits that add up to different, unique sums.

在這邊我做一個code紀錄,如果有更厲害的朋友可以指教。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public static int solution(int[] A) {
long startTime = System.nanoTime(); // 測試時間
HashMap<Integer, ArrayList<Integer>> entity = new HashMap<>();
ArrayList<Integer> list;
for(int i=0 ; i<A.length ; i++) {
int total = addAllDigit(A[i]); // 每一位數字相加
// 先找尋entity的key有沒有相同的
if(entity.containsKey(total)) { // 有相同
// 拿出原本map裡的list
ArrayList<Integer> internal = entity.get(total);
internal.add(A[i]);
// 覆蓋存回該map裡面
entity.put(total, internal);
} else { // 沒有相同
list = new ArrayList<>();
list.add(A[i]);
entity.put(total, list);
}
}
int biggest = -1;
for(Integer value : entity.keySet()) {
Integer array[] = (entity.get(value)).toArray(new Integer[0]);
int total = addTwoNumberBiggest(array);
if(total != -1 && total>biggest) {
biggest = total;
}
}
long endTime = System.nanoTime(); // 測試時間
System.out.println("spend Time :" + (endTime-startTime)/1000000);
return biggest;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 每一位數字相加
public static int addAllDigit(int number) {
int flag=1;
int result=0;
result += number%10;
number = number/10;
while(flag != -1) {
result += number%10;
if((number/10) != 0) {
number = number/10;
} else {
flag = -1;
}
}
return result;
}
1
2
3
4
5
6
7
8
9
10
11
12
	// 一個list裡面存在的兩數相加最大 / 若只存在一個數字, 因為無法相加所以回傳-1
public static int addTwoNumberBiggest(Integer[] A) {
Integer copyArray[] = Arrays.copyOf(A, A.length);
Arrays.sort(copyArray);
if(copyArray.length < 2) {
return -1;
}
return copyArray[copyArray.length-2]+copyArray[copyArray.length-1];
// 會影響到原先的array
// Arrays.sort(A);
// return A[A.length-2]+A[A.length-1];
}

Airpods Pro好厲害

強大的Airpods PRO
Airpods PRO

今天就來分享我的最近新買的airpods pro,爽感爆表

    1. 強大的降噪功能

      airpods pro 強大的降噪功能絕對不是亂說的,價錢也不是亂貴的,真的有他的合理性。
      他有分兩種模式:降噪、通透。

      • a. 降噪:
        可以讓我們周圍的聲音降低,是低到那種無聲的感覺,也是因為耳機裡面有那貴三三的科技,可以平衡並降低耳朵附近的聲音,讓我們耳朵彷彿呈現在無聲狀態之中。
      • b. 通透:
        與降噪相反的就是通透,為了是讓我們可以聽到音樂又可以聽到外邊的聲音。因為是耳塞式的耳機,當你帶上的時候,基本上聲音已經有被削弱一些,而通透的模式可以讓我們聽得清楚外邊的聲音,我想也有它使用的時機吧,不過我現在是用不到就是了。
    1. 不錯的續電力

      airpods pro 續電力也比前兩代的airpods來的高,換句話說我們可以聽得更久,講電話講得更久。
      而且以單耳來說僅需要充電五分鐘,就可以讓你享有一個小時的通話、聽音樂時間。根本可以整天帶著也不為過。

    1. 快速的配對、放入耳朵偵測、與耳麥的清晰接收

      • a. airpods pro 的配對速度非常快,可能本身使用的是蘋果手機,所以才有這種速度,這我不清楚。但是就以它的配對速度來說真的很給力。
      • b. 當你將airpods 放入耳朵時,會自動的偵測並發出連結音,告知使用者已放入耳朵。如果你正在用airpods聽音樂,突然有事拿下airpods的時候,就會自動暫停音樂的撥放。
      • c. 從以往的airpods來說,耳麥的接收器通常都不錯,這款也是不惶多讓的。

目前使用第二天所得到的直接感覺,只能說覺得很適合我,當然不能說每個人都喜歡。至於這個價錢,一開始看覺得真的很貴,但是用完之後就會知道他值得這樣。

Markdown之學習使用插入圖片與連結

今天一起來學習簡單又輕鬆的輕量級標記式語言Markdown
創始人為約翰·格魯伯,該語言使用易讀易寫之純文字,後可轉換成XHTML文件供使用。

第三課

摘自https://www.markdowntutorial.com/

1. 在文章中插入圖片

1
寫法:![圖片名稱](圖片url)

PS: 自己的圖片目前是都放在imgur裡。
示範1:

dog

dog

PS: 前面的圖片名稱並不會出現,僅是作為一個虛擬名稱用,所以需要另外給一個名稱。

2. 文章中引入連結

1
寫法:[連結名稱](網頁url)

示範2:
進入GOOGLE

PS: 連結名稱即為連結點,不需要另外給名稱去表示。

3. 圖片做連結點

1
寫法:[![圖片名稱](圖片url)](網址url)

示範3:
dog

PS: 文章中插入圖片與引入連結的合體技巧,以引入連結為主, 連結名稱 就是放入我們的圖片,而網頁url就是放入我們要連結的網址。

Markdown之學習使用(#)

今天一起來學習簡單又輕鬆的輕量級標記式語言Markdown
創始人為約翰·格魯伯,該語言使用易讀易寫之純文字,後可轉換成XHTML文件供使用。

第二課

摘自https://www.markdowntutorial.com/

(#)的使用

1
功能:可以顯示如html標籤h1,h2,h3...相同標題效果

示範:

這是Header one

這是Header two

這是Header three

這是Header four

這是Header five
這是Header six

PS: 標題效果使用的時候, # 與字需要空格並且也要從該行第一列開始放置,否則不會被識別,會變成一般的#。

1
意即:#(空格)這是Header one

這點使用上要注意喔!

Markdown之學習使用(_) and (*)

今天一起來學習簡單又輕鬆的輕量級標記式語言Markdown
創始人為約翰·格魯伯,該語言使用易讀易寫之純文字,後可轉換成XHTML文件供使用。

第一課

摘自https://www.markdowntutorial.com/

(*) 的使用

1
練習語句:製造粗體字

可以使用**包圍該特定句子,就可以製造粗體的效果。

示範:
製造粗體字

1
**粗體字** :如此使用,可以將所圈住的字詞變成粗體字。

(_) 的使用

1
練習語句:製造斜體字。

可以使用 _ 包圍該特定句子,就可以製造斜體的效果。

示範:
製造 斜體字

1
_斜體字_ :如此使用,可以將所圈住的字詞變成斜體字。

PS: 斜體字使用的時候, _ 前後皆需要空格,否則不會被識別,會變成一般的_。

1
意即:製造(空白)_斜體字_(空白)。

這點使用上要注意喔!

==============================

1
例句:今天出門看到門前的一灘血跡,我嚇了一跳!後來才知道是前天晚上爸爸把門給漆上油漆,剛好就是紅色的。

修改後:今天出門看到門前的一灘血跡,我嚇了一跳!後來才知道是前天晚上爸爸把門給漆上油漆,剛好就是 紅色 的。

如此有情緒轉折的一句話,如果只是如上輕輕的帶過,並不會有什麼特別的火花,當加入一些適當的斜體或粗體字時,可以增加文章的閱讀火花。

SELECT寫法綜合觀

本篇用於統合曾經見過的SELECT寫法

可根據物件的欄位是否有值去加入到DB的statement(動態改變)

便利程度:★★★★(4/5滿分五顆星)
缺點:append的地方寫死了,這樣如果欄位超多的話 會累爆吧!!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
private StringBuffer method(javaEntity argVO){
StringBuffer stmt = new StringBuffer();
UsersVo temp = (UsersVo) argVO;
if (temp != null)
{
StringBuffer sb = new StringBuffer();
if (temp.getUSERSID() != 0)
{
sb.append(" and UsersID=? ");
}
if (temp.getGROUPID() != 0)
{
sb.append(" and GROUPID=? ");
}
if (temp.getACCOUNT() != null
&& !temp.getACCOUNT().trim().equals(""))
{
sb.append(" and ACCOUNT=?");
}
if (temp.getDEPART() != null && !temp.getDEPART().trim().equals(""))
{
sb.append(" and DEPART=?");
}
if (temp.getPASWD() != null && !temp.getPASWD().trim().equals(""))
{
sb.append(" and PASWD=?");
}
if (temp.getISSECURITY() != null
&& !temp.getISSECURITY().trim().equals(""))
{
sb.append(" and ISSECURITY=?");
}
if (temp.getISSUPER() != null
&& !temp.getISSUPER().trim().equals(""))
{
sb.append(" and ISSUPER=?");
}
if (sb.length() > 0)
{
stmt.append(" where 1=1 ").append(sb.toString());
}
}
stmt.append(" order by UsersID");
return (stmt);
}

可根據物件值的特性,字串或數字或文字比對(動態改變)

便利程度:★★★★★(5/5滿分五星)
缺點:幾乎沒有缺點,這種方式非常方便,根據DB欄位名的key加上要塞入的value組成的Map。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public List<Process> search(Map<String, Object> inquiry, Info info) throws ApplicationException {
try {
StringBuilder hql = new StringBuilder("from Process where dataStatus <> ?");
ArrayList<Object> values = new ArrayList<Object>();
values.add(PlatformProperty.DataStatus.DELETE.ordinal());
String cndi = " and ";
for (String column : inquiry.keySet()) {
Object data = inquiry.get(column);
if (data == null) {
continue;
}
if (data.getClass().isArray()) {
Object[] value = (Object[]) data;
hql.append(cndi).append(column).append(" in (").append(repeat("?", ", ", value.length)).append(") ");
values.addAll(Arrays.asList(value));
cndi = " and ";
} else if (data instanceof Integer) {
hql.append(cndi).append(column).append(" = ? ");
values.add(data);
cndi = " and ";
} else {
String value = (String) data;
if (StringUtils.isBlank(value)) {
continue;
}
hql.append(cndi).append(column);
hql.append(value.contains("%") ? " like ? " : " = ? ");
values.add(value);
cndi = " and ";
}
}
hql.append(" order by code");
return super.findByHQL(hql.toString(), values, info);
} catch (Exception e) {
throw new ApplicationException(e, info);
}
}

今天的日記

試著連結到google for more info.

今日重點

工作內容

1
2
修改使DB儲存的seq流水號可以自動的編寫
文件需要修改

ps: 全部都完成了

工作完成程度

1
2
全部都完成了
文件寫完

工作遇到的難題

1
原本以為自動產生流水號跟權限有關,但其實沒有

工作學到的東西

1
學到新的Oracle-DB語法,原來可以用這樣的方式自動產生流水號,但真的要怎麼用不清楚XD