這道題的難易是符合其名的
編寫一個(gè)函數(shù),其作用是將輸入的字符串反轉(zhuǎn)過來。輸入字符串以字符數(shù)組 s 的形式給出。
不要給另外的數(shù)組分配額外的空間,你必須原地修改輸入數(shù)組、使用 O(1) 的額外空間解決這一問題。
示例 1:
輸入:s = [“h”,“e”,“l(fā)”,“l(fā)”,“o”]
輸出:[“o”,“l(fā)”,“l(fā)”,“e”,“h”]
示例 2:
輸入:s = [“H”,“a”,“n”,“n”,“a”,“h”]
輸出:[“h”,“a”,“n”,“n”,“a”,“H”]
來源:力扣(LeetCode)
鏈接:https://leetcode.cn/problems/reverse-string
- 本題相對(duì)簡(jiǎn)單,以下是我的思路。
- 運(yùn)用兩個(gè)指針分別指向字符串的首元素和最后一個(gè)元素,進(jìn)行交換后左指針++右指針–,很明顯這是一個(gè)循環(huán),當(dāng)且僅當(dāng)左指針<=(<)循環(huán)繼續(xù)。
以下是代碼實(shí)現(xiàn):
void reverseString(char* s, int sSize){char* left = s;
char* right = s + sSize - 1;
while (left<= right)
{char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
541 反轉(zhuǎn)字符串 II我的感覺 反轉(zhuǎn)字符串|| 明顯比 反轉(zhuǎn)字符串 難了許多
給定一個(gè)字符串 s 和一個(gè)整數(shù) k,從字符串開頭算起,每計(jì)數(shù)至 2k 個(gè)字符,就反轉(zhuǎn)這 2k 字符中的前 k 個(gè)字符。
如果剩余字符少于 k 個(gè),則將剩余字符全部反轉(zhuǎn)。
如果剩余字符小于 2k 但大于或等于 k 個(gè),則反轉(zhuǎn)前 k 個(gè)字符,其余字符保持原樣。
示例 1:
輸入:s = “abcdefg”, k = 2
輸出:“bacdfeg”
示例 2:
輸入:s = “abcd”, k = 2
輸出:“bacd”
來源:力扣(LeetCode)
鏈接:https://leetcode.cn/problems/reverse-string-ii
- 這道題目的意思明顯被啰嗦化了,實(shí)際上,我們只需要將下標(biāo)為2k的倍數(shù)的前長(zhǎng)度為k的字串反轉(zhuǎn),當(dāng)字串長(zhǎng)度<=k則全部反轉(zhuǎn)即可
以下是我按照這個(gè)思路寫的C語(yǔ)言代碼,內(nèi)容比較多:
int my_strlen(char* s)
{int count = 0;
while (*s++ != '\0')
{count++;
}
return count;
}
char* reverseStr(char* s, int k) {int i = 0;
int j = 0;
int len = my_strlen(s);
if (len<= k) // 開始進(jìn)來判斷字符串的長(zhǎng)度是否小于等于k,成立則直接反轉(zhuǎn)即可
{char* left = s;
char* right = s + len - 1;
while (left<= right)
{char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
return s;
}
for (i = 0; i< len; i += 2 * k) // 下標(biāo)跳2k
{char* left = s + i;
char* right = NULL;
if (my_strlen(left)<= k) // 從left指向的元素開始求長(zhǎng)度,如果小于k則right指針直接指向最后一個(gè)元素,再反轉(zhuǎn)
{right = s + len - 1;
}
else
{right = s + k + i - 1;
}
while (left< right)
{char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
return s;
}
628. 三個(gè)數(shù)的大乘積給你一個(gè)整型數(shù)組 nums ,在數(shù)組中找出由三個(gè)數(shù)組成的大乘積,并輸出這個(gè)乘積。
示例 1:
輸入:nums = [1,2,3]
輸出:6
示例 2:
輸入:nums = [1,2,3,4]
輸出:24
示例 3:
輸入:nums = [-1,-2,-3]
輸出:-6
來源:力扣(LeetCode)
鏈接:https://leetcode.cn/problems/maximum-product-of-three-numbers
- 本題可以先將數(shù)組進(jìn)行升序,然后再將數(shù)組的最后的三個(gè)元素的乘積與第一個(gè)和第二個(gè)以及最后一個(gè)元素的乘積比大小,返回大的那個(gè)值。
- 根據(jù)兩負(fù)一正原理,我們這樣去做,我們會(huì)發(fā)現(xiàn),有負(fù)數(shù),有幾個(gè)負(fù)數(shù)的情況都被考慮進(jìn)去了,只要仔細(xì)想想就可以明白。
int cmp(int* a, int* b) {return *a - *b;
}
int maximumProduct(int* nums, int numsSize) {qsort(nums, numsSize, sizeof(int), cmp); // 將數(shù)組升序排列
return fmax(nums[0] * nums[1] * nums[numsSize - 1], nums[numsSize - 3] * nums[numsSize - 2] * nums[numsSize - 1]);
}
這里使用了兩個(gè)函數(shù),一個(gè)是qsort排序函數(shù)(因?yàn)镃語(yǔ)言運(yùn)用兩個(gè)for循環(huán)嵌套排序可能會(huì)造成超出時(shí)間限制的情況),一個(gè)是fmax求大值函數(shù),具體的使用大家可以查閱資料,很容易就可以理解。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧