2022年1月15日 星期六

聽說有去北海道(三)登別.瀧乃家.早晚餐篇

嗯~好喔~讓我們相隔三年的來把北海道寫完XD ?!
似乎還不一定寫的完 XDDDD 歐賣尬!!!

2022年1月9日 星期日

[台北] 稻舍Rice & Shine 誠品信義店

說起這次想想再次拾起食記的緣由, (咦其實沒人想知道原因嗎XD )
原因之一是近年來每次在網路上搜尋餐廳評價時,
清一色的業配文是沒有關係, 但是多半無法寫到食物的痛處 (是哪裡)
再來是近日看到一些有點失真的評論感到頭很痛(關妳什麼事呢XD)
比方說吃了巴斯克蛋糕說它底層的塔皮如何如何
巴斯克根本就沒有塔皮!!!NO!!!這太NG了啊啊啊啊啊~~~~(抱頭)

2022年1月2日 星期日

新的一年!

結果已經2022了嗎 XD
看來去年一整年都沒有正經的文章(咦是去年跟前年兩整年嗎 @o@)
而宣稱不想讓太貴的日本溫泉旅館連上傳的照片都忘記在哪裡想要趕快寫一寫的北海道
果不其然的沒有寫完啊哈哈哈哈哈哈哈哈哈 XD (怎麼會這樣呢?!XD )

2021年7月4日 星期日

[38] Count and Say

我覺得我一定誤會了什麼
雖說recursive據說都可以用非recursive的方式寫出來
但我現在好困惑我好迷惘
我是誰我在哪裡我在這裡做什麼~(寫Leetcode)
每次執行出來的速度和memory需求都不一樣~為什麼會這樣呢?
難道測資會變嗎XD
總而言之~還有就是buffer的free應該在哪兒呀?!
真是太久沒寫C了一切變得好難!
兩個buffer應該可以融為一體(吧)然後好像字串的copy比較慢(我猜的)
想一想再來重寫一次好了......(然後就忘記了吧哈哈哈笑著流淚)
char * countAndSay(int n)
{
    if (n<=1)
    {
        return "1";
    }
    
    char *buffer = countAndSay(n-1);
    int bufferLen= strlen(buffer);
    char *output = (char *) malloc(sizeof(char) * (2*bufferLen+1));
    sprintf(output, "%s",buffer);
    output[bufferLen] = 0;
    char count[16];
    char cat[2*bufferLen+1];
    cat[0]= 0;
    int say =0;
    int pre = 0, reset = 0;
    for (say=0; say < bufferLen; say++)
    {
        reset++;
        if (output[say]== output[say+1])
            continue;            
        else
        {
            sprintf(count,"%d%c",reset,output[pre]);
            strcat(cat, count);
            pre=say+1;
            reset=0;
        }
    }
    sprintf(output,"%s",cat);
//    free(output);
    return output;
}
改成memcpy也沒有快多少啊哈哈哈(逃走)
char * countAndSay(int n)
{
    if (n<=1)
    {
        return "1";
    }
    
    char *buffer = countAndSay(n-1);
    int bufferLen= strlen(buffer);
    char *output = (char *) malloc(sizeof(char) * (2*bufferLen+1));
    memset(output, 0, 2*bufferLen+1);
    memcpy(output, buffer, bufferLen);
    char count[16];
    char cat[2*bufferLen+1];
    cat[0]= 0;
    int say =0;
    int pre = 0, reset = 0;
    for (say=0; say < bufferLen; say++)
    {
        reset++;
        if (output[say]== output[say+1])
            continue;            
        else
        {
            sprintf(count,"%d%c",reset,output[pre]);
            strcat(cat, count);
            pre=say+1;
            reset=0;
        }
    }
    memcpy(output, cat, strlen(cat));
//    free(output);
    return output;
}

2021年6月27日 星期日

[122] Best Time to Buy and Sell Stock II

怎麼又寫起了Leetcode了呢~~~~~
久未寫, 寫起來果然是礙手礙腳的. 還因為蠢bug看半天= =
修了一下難得submit是過的!而且不算慢~
但對比最佳解還是有很長一段路要走, 哈!

int maxProfit(int* prices, int pricesSize)
{
    int profit = 0;
    int i = 0;
    int stockBuy=prices[0];
    if (pricesSize &lt;= 1)
        return profit;
    for (i=0; i &lt; pricesSize-1; i++)
    {
        if(prices[i+1] &lt; prices[i] )         
        {
            if(prices[i]-stockBuy &gt; 0)
                profit += prices[i] - stockBuy;
            stockBuy = prices[i+1];
        }
        else if ((i+1) == (pricesSize-1))
        {
            profit = profit + (prices[i+1] - stockBuy);               
            return profit;
        }
    }
    return profit;
}

2019年8月27日 星期二

聽說有去北海道(二)登別.瀧乃家.房間篇

出了一個差感覺已經往生, 北海道彷彿是前世的記憶
趁著還沒有連照片都找不到在哪裡, 再次趕快來寫一寫.

2019年6月29日 星期六

聽說有去北海道(一)

基於一個住了貴飯店萬萬不能讓它憑空消失在記憶的橫流裡(?)的這個理由
北海道也要來給它寫一寫. 
這樣才能拿出來跟老李說「你看你看你看~~~」

2019年6月22日 星期六

一個日月潭

好久沒有寫文章了
難得去了一下日月潭
終於突破礁溪以南我感動 ToT
為表紀念就來寫一下遊記(x)雜記(o)

2018年4月16日 星期一

[67] Add Binary

吸加加的string好方便QQ
不過還是寫的很醜
sign

Add Binary
class Solution {
public:
    string addBinary(string a, string b) {
        int lenA = a.length();
        int lenB = b.length();
        string ret;
        int i,j, flag = 0;
        for(i=lenA,j=lenB;(i>0 || j>0);i--,j--)
        {
            int anum = 0,bnum = 0;
            if (i>0)
                anum = a[i -1] - '0';
            if (j>0)
                bnum = b[j -1] - '0';

            int tmp = flag + anum + bnum;
            if (tmp > 1)
            {
                flag = 1;
                tmp -=2;
            }
            else
                flag = 0;
            ret = to_string(tmp) + ret;


        }
        if (flag>0)
            ret = "1" + ret;

        return ret;
    }
};

[20260710] 更新
奇怪別人寫就是比較漂亮 ~—~
#define max(a,b) (a>b)?(a):(b)
void reverse(char *a, char *b){
char tmp = *a;
*a=*b;
*b=tmp;
}

char* addBinary(char* a, char* b) {
int l1 = strlen(a);
int l2 = strlen(b);
int longer= max(l1, l2);
int carry = 0;
char *ret = calloc(longer+2, sizeof(char));//for additional carry & ending so it's longer +1 +1
int idx = 0;
while (longer>0){
int v1=0;
int v2=0;
if (l1-1>=0)
v1= a[--l1]-'0';
if (l2-1>=0)
v2= b[--l2]-'0';
//printf("%d + %d\n", v1, v2);
int sum = carry+v1+v2;
carry = (sum>1)? 1: 0;
ret[idx++]= ((sum& 0x1)==1)? '1' :'0';
longer--;
}
if (carry>0)
ret[idx++]='1';
//printf("idx %d carry %d\n", idx,carry);
for (int i=0; i<idx/2;i++)
reverse(&ret[i], &ret[idx-1-i]);
return ret;
}

看來while 可以改成 l1>0 || l2>0 || carry 結果又改出無窮回圈 囧
#define max(a,b) (a>b)?(a):(b)
void reverse(char *a, char *b){
char tmp = *a;
*a=*b;
*b=tmp;
}

char* addBinary(char* a, char* b) {
int l1 = strlen(a);
int l2 = strlen(b);
int longer= max(l1, l2);
int carry = 0;
char *ret = calloc(longer+2, sizeof(char));//for additional carry & ending so it's longer +1 +1
int idx = 0;
while (l1>0 || l2>0 || carry){
int v1=0;
int v2=0;
if (l1-1>=0)
v1= a[--l1]-'0';
if (l2-1>=0)
v2= b[--l2]-'0';
int sum = carry+v1+v2;
carry = (sum>1)? 1: 0;
ret[idx++]= ((sum& 0x1)==1)? '1' :'0';
}
for (int i=0; i<idx/2;i++)
reverse(&ret[i], &ret[idx-1-i]);
return ret;
}
[20260709] 更新
有一點懶得修! 這個算是復健題XD 輸入小的時候應該是對的~
但長度一長就一定是錯的要重寫~就先貼下吧. 沒想到當年我竟然是用C++寫的XD

int str2int(char* s1, int len){
int ret=0;
for (int i=0; i<len;i++)
{
ret = (ret<<1) + (s1[i] & 0x1);
}
// printf("ret %d\n",ret);
return ret;
}
#define STRLEN INT_MAX
void swap(char *a, char *b){
char tmp = *a;
*a = *b;
*b = tmp;
return;
}

char* int2str(int val){
char *ret = calloc (STRLEN,sizeof(char));
int idx = 0;
//printf("int2str val %d\n",val);
while (val>0)
{
if (val&0x1 == 1)
ret[idx++]='1';
else
ret[idx++]='0';
val= val>>1;
//printf("int2str idx %d, [%c]\n",idx, ret[idx-1]);
}
//printf("int2str idx(len) %d\n",idx);
char *reverse= calloc(idx+1, sizeof(char));
// char *reverse = (char*) realloc(ret, idx*sizeof(char));
for (int i=0; i<idx; i++)
reverse[idx-i-1]= ret[i];
#if 0
printf("int2str idx %d, strlen %d\n",idx, strlen(reverse));
for (int i=0; i<idx/2; i++)
{
swap(&reverse[i], &reverse[idx-i]);
}
#endif
if (idx==0)
return "0";
return reverse;
}

char* addBinary(char* a, char* b) {
int l1 = strlen(a);
int l2 = strlen(b);
printf("l1 %d l2 %d\n",l1,l2);
int sum = str2int(a,l1) + str2int(b,l2);
//printf("sum %d\n",sum);

return int2str(sum);
// return NULL;
}

2018年4月14日 星期六

[35] Search Insert Position

給一個sorted array和一個數字,
回傳這個數字在array裡的index
如果不存在, 則回傳依大小把它加進去的話它應該是多少index
吸加加到底是什麼
我現在好迷惘啊~~~(滾來滾去滾來滾去)

Search Insert Position
class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int i, len = nums.size();
        for (i=0;i<len;i++)
            if (nums[i] >= target)
                break;
        return i;
    }
};

[20251025 更]
什麼原來我當時是用C++寫嗎~_~
結果還是搞不懂return value 應該是什麼啊啊啊啊啊~(抱頭)
在這個題目裡, 兩種return 是一樣的。
while 給它等於,  mid 給它加減一。

int searchInsert(int* nums, int numsSize, int target) {
int l=0;
int r = numsSize-1;
while(l<=r)
{
int mid = l+(r-l)/2;
if (nums[mid]== target)
return mid;
if (nums[mid]<target)
l=mid+1;
if (nums[mid]>target)
r=mid-1;
}
return l;
return r+1;
}