日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

力扣(LeetCode)刷题,简单题(第18期)

發(fā)布時(shí)間:2023/11/27 生活经验 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 力扣(LeetCode)刷题,简单题(第18期) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

第1題:好數(shù)對(duì)的數(shù)目

第2題:返回倒數(shù)第k個(gè)節(jié)點(diǎn)

第3題:將每個(gè)元素替換為右側(cè)最大元素

第4題:刪除最外層的括號(hào)

第5題:6和9組成的最大數(shù)

第6題:搜索插入位置

第7題:判定字符是否唯一

第8題:唯一摩爾斯密碼詞

第9題:統(tǒng)計(jì)有序矩陣中的負(fù)數(shù)

第10題:二叉搜索樹的第k大節(jié)點(diǎn)


力扣(LeetCode)定期刷題,每期10道題,業(yè)務(wù)繁重的同志可以看看我分享的思路,不是最高效解決方案,只求互相提升。

第1題:好數(shù)對(duì)的數(shù)目

試題要求如下:

回答(C語(yǔ)言):

int numIdenticalPairs(int* nums, int numsSize){int hash[101];int res = 0;memset(hash, 0, 101 * sizeof(int));for(int i = 0; i < numsSize; ++i) {hash[nums[i]] += 1;}for(int i = 0; i < 101; ++i) {if(hash[i] >= 2) {res += hash[i] * (hash[i]-1) / 2;}}return res;
}

運(yùn)行效率如下所示:


第2題:返回倒數(shù)第k個(gè)節(jié)點(diǎn)

試題要求如下:

解答思路:

1、先讓t向前走K步;

2、head和t同步前進(jìn),t到結(jié)尾,head到目標(biāo)。

回答(C語(yǔ)言):

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/int kthToLast(struct ListNode* head, int k){struct ListNode*t = head;while (k--){t = t->next;}while (t){t = t->next;head = head->next;}return head->val;
}

運(yùn)行效率如下所示:


第3題:將每個(gè)元素替換為右側(cè)最大元素

試題要求如下:

回答(C語(yǔ)言):

/*** Note: The returned array must be malloced, assume caller calls free().*/
int* replaceElements(int* arr, int arrSize, int* returnSize){int temp_max = 0,temp_num = 0;temp_max = arr[arrSize-1];for(int i = arrSize-2; i >= 0; i--){temp_num = arr[i];arr[i] = temp_max;if(temp_max < temp_num){temp_max = temp_num;}}arr[arrSize-1] = -1;*returnSize = arrSize;return arr;
}

運(yùn)行效率如下所示:


第4題:刪除最外層的括號(hào)

試題要求如下:

回答(C語(yǔ)言):

char * removeOuterParentheses(char * S){int cnt = 0,k = 0;for(int i = 0;i < strlen(S);i++){if(S[i] == '('){if(cnt != 0) S[k++] = S[i];cnt ++;}if(S[i] == ')'){cnt--;if(cnt != 0) S[k++] = S[i];}}S[k] = '\0';return S;
}

運(yùn)行效率如下所示:


第5題:6和9組成的最大數(shù)

試題要求如下:

解答思路:

現(xiàn)在把?9?翻轉(zhuǎn)成?6?是不合理的,因?yàn)樗鼤?huì)使得數(shù)字變小。因此我們應(yīng)當(dāng)找到?num?中最高位的?6,將其翻轉(zhuǎn)成?9

回答(C語(yǔ)言):

#include <Math.h>int maximum69Number (int num){int count = 0, th = 0;  // count 記錄除了多少次,th記錄最大的6在第幾位int re = num;while(re){count++;if(re%10==6)th = count;re /= 10;}return num+3*pow(10,th-1);
}

運(yùn)行效率如下所示:


第6題:搜索插入位置

試題要求如下:

回答(C語(yǔ)言):

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

運(yùn)行效率如下所示:


第7題:判定字符是否唯一

試題要求如下:

回答(C語(yǔ)言):

bool isUnique(char* astr){int len = strlen(astr);char* temp_data = (char*)malloc(sizeof(char)*(26));memset(temp_data,0,26);for(int i = 0,cou = 0; i < len; i++){cou = astr[i]-'a';if(temp_data[cou] == 0){temp_data[cou] = astr[i];}else{return false;}}return true;
}

運(yùn)行效率如下所示:


第8題:唯一摩爾斯密碼詞

試題要求如下:

解答思路:

建立字符串?dāng)?shù)組morse,存放words中的字符串轉(zhuǎn)成莫爾斯密碼后的字符串,每次處理words中的字符串,如果不重復(fù),就添加到morse里面,最終輸出morse中字符串的個(gè)數(shù)。

回答(C語(yǔ)言):

int uniqueMorseRepresentations(char ** words, int wordsSize){char dict[26][5] = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};//5*12 = 60char morse[100][60] = {0};int count = 0;for (int i = 0; i < wordsSize; i++) {char tmp[60] = { 0 };int flag = 0;//每個(gè)字符串對(duì)應(yīng)的摩斯碼放入tmp中for (int j = 0; j < strlen(words[i]); j++) {strcat(tmp, dict[words[i][j] - 'a']);}//定義flag分辨相同和不同,如果tmp和morse中的不同 就放入morse中for (int k = 0; k < count; k++) {if (strcmp(morse[k], tmp) == 0) {flag = 1;break;}}//不同的話就放入morse中if (flag == 0) {strcpy(morse[count], tmp);count++;}}return count;
}

運(yùn)行效率如下所示:


第9題:統(tǒng)計(jì)有序矩陣中的負(fù)數(shù)

試題要求如下:

解答思路:

從最后一行最后一列掃描,若此行最后一個(gè)元素 >0 則直接返回,若此列某個(gè)元素 >0 則跳出內(nèi)循環(huán),檢查上一行。

回答(C語(yǔ)言):

int countNegatives( int ** grid , int gridSize , int * gridColSize)
{int count = 0;for( int i = gridSize - 1 ; i >= 0  ; i-- ){int j = *( gridColSize + i ) - 1;if( *( *( grid + i ) + j ) >= 0 ){return count;}for(  ; j >= 0 ;j-- ){if( *( *( grid + i ) + j ) >= 0 ){break;}count++;}}return count;
}

運(yùn)行效率如下所示:


第10題:二叉搜索樹的第k大節(jié)點(diǎn)

試題要求如下:

解答思路:

本文解法基于此性質(zhì):二叉搜索樹的中序遍歷為?遞增序列?。

根據(jù)以上性質(zhì),易得二叉搜索樹的 中序遍歷倒序 為 遞減序列 。因此,求 “二叉搜索樹第 kk 大的節(jié)點(diǎn)” 可轉(zhuǎn)化為求 “此樹的中序遍歷倒序的第 kk 個(gè)節(jié)點(diǎn)”。

回答(C語(yǔ)言):

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/void inOrderReverse(struct TreeNode *root, int k, int *cnt, int *ret) {if (NULL == root || *cnt >= k)return;inOrderReverse(root->right, k, cnt, ret);(*cnt)++;if (*cnt == k)*ret = root->val;inOrderReverse(root->left, k, cnt, ret);
}int kthLargest(struct TreeNode *root, int k) {int ret;int cnt;inOrderReverse(root, k, &cnt, &ret);return ret;
}

運(yùn)行效率如下所示:

總結(jié)

以上是生活随笔為你收集整理的力扣(LeetCode)刷题,简单题(第18期)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。