Leedcode iOS代碼+解題思路

最近看看Leetcode只有swift,沒有OC的運行環(huán)境萨驶,最近時間比較富裕,出一篇OC的leetcode章節(jié)艇肴,希望救iOS于水火腔呜,或者把iOS推入水火。

#pragma --mark? 兩數(shù)之和--簡單 /**

?輸入:nums = [2,7,11,15], target = 9? ?輸出:[0,1]

?輸入:nums = [3,2,4], target = 6? 輸出:[1,2]

?輸入:nums = [3,3], target = 6? ?輸出:[0,1]

?鏈接:https://leetcode-cn.com/problems/two-sum

?*/


//O(n*n)? 暴力的一般方法

-(NSArray*)twoSum:(NSArray*)numstarget:(int)target{

? ? //篩選

? ? if(nums ==nil|| nums.count== 0){

? ? ? ? return@[];

? ? }else{

? ? ? ? intfirstIndex = 0;

? ? ? ? intlastIndex = 0;

? ? ? ? for(inti = 0 ; i< nums.count-1 ; i++){

? ? ? ? ? ? for(intj=i+1 ; j

? ? ? ? ? ? ? ? if(target == [nums[i]intValue] + [nums[j]intValue]){

? ? ? ? ? ? ? ? ? ? firstIndex = i ;

? ? ? ? ? ? ? ? ? ? lastIndex = j;

? ? ? ? ? ? ? ? ? ? break;//找到結(jié)果break;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? return@[@(firstIndex),@(lastIndex)];

? ? }

}

暴力解法就是直來直去再悼。


//O(n) 一般方法

-(NSArray*)twoSum1:(NSArray*)numstarget:(int)target{

? ? if(nums ==nil|| nums.count== 0){

? ? ? ? return@[];

? ? }else{

? ? ? ? intfirstIndex = 0;

? ? ? ? intlastIndex = 0;

? ? ? ? intlen = (int)nums.count;

? ? ? ? NSMutableDictionary *dict = [NSMutableDictionary dictionary];

? ? ? ? for(inti = 0 ; i< len ; i++){

? ? ? ? ? ? intanother = target - [nums[i]intValue];

? ? ? ? ? ? if([dict.allValuescontainsObject:@(another)]){

? ? ? ? ? ? ? ? NSArray*resultArray = [dictallKeysForObject:@(another)];

? ? ? ? ? ? ? ? firstIndex? = [resultArray[0]intValue];

? ? ? ? ? ? ? ? lastIndex = i;

? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? [dictsetObject:@(another)forKey:[NSStringstringWithFormat:@"%d",i]];

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? return@[@(firstIndex),@(lastIndex)];

? ? }

}

所謂的算法優(yōu)化核畴,就是犧牲空間來降低時間復(fù)雜度, 這里采用了可變字典冲九,用于做O(1)的查找谤草。?


#pragma --mark兩數(shù)相加-中等

?輸入:l1 = [2,4,3], l2 = [5,6,4] 輸出:[7,0,8]

?輸入:l1 = [0], l2 = [0]? ? 輸出:[0]

?輸入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]? ?輸出:[8,9,9,9,0,0,0,1]

?O(n)

?鏈接:https://leetcode-cn.com/problems/add-two-numbers

?*/

這個在擼碼之前,要在iOS端先定義好ListNode 數(shù)據(jù)結(jié)構(gòu)


//定義單鏈表

@interface ListNode : NSObject

@property (nonatomic ,assign) int val;

@property (nonatomic ,strong) ListNode * next;

-(instancetype)init;

-(instancetype)initWithVal:(int)val;

-(instancetype)initWithVal:(int)valnext:(ListNode*)next;

-(void)appendListNode:(ListNode *)node;

@end

@implementation ListNode

-(instancetype)init{

? ? self= [superinit];

? ? if(self){


? ? }

? ? return self;

}

-(instancetype)initWithVal:(int)val{

? ? self= [superinit];

? ? if(self){

? ? ? ? [self configNodeWithVal:val next:nil];

? ? }

? ? return self;

}

-(instancetype)initWithVal:(int)valnext:(ListNode*)next{

? ? self= [superinit];

? ? if(self){

? ? ? ? [selfconfigNodeWithVal:valnext:next];

? ? }

? ? return self;

}

-(void)configNodeWithVal:(int)val next:(ListNode *)next{

? ? self.val= val;

? ? self.next= next;

}

-(void)appendListNode:(ListNode *)node{

? ? self.next= node;

}

@end




-(ListNode *)addTwoNumbersWithL1:(ListNode *)l1 L2:(ListNode *)l2{

? ? ListNode *result = [[ListNode alloc]initWithVal:0 next:nil];

? ? ListNode*head = result;//temp 不能更改result指向

? ? intpreIndex = 0;

? ? while(l1 !=NULL || l2 !=NULL) {

? ? ? ? intsum? = l1.val+ l2.val+ preIndex;

? ? ? ? intshowValue = sum%10;

? ? ? ? ListNode*currentNode = [[ListNodealloc]initWithVal:showValue];

? ? ? ? preIndex = sum/10;

? ? ? ? head.next= currentNode;

? ? ? ? head = currentNode;

? ? ? ? if(l1!=NULL){

? ? ? ? ? ? l1 = l1.next;

? ? ? ? }

? ? ? ? if(l2 !=NULL){

? ? ? ? ? ? l2 = l2.next;

? ? ? ? }

? ? }

? ? returnresult.next;

}

思路:就是利用常規(guī)加法規(guī)則,設(shè)置好進(jìn)位的臨時變量咖刃,還有head變量泳炉,然后就是鏈表基本操作和遍歷



#pragma --mark? 無重復(fù)字符的最長子串? -- 中等

/**

?給定一個字符串 s ,請你找出其中不含有重復(fù)字符的?最長子串?的長度嚎杨。

?輸入: s = "abcabcbb"? ? 輸出: 3

?輸入: s = "bbbbb"? ?輸出: 1

?輸入: s = "pwwkew"? ?輸出: 3

?提示:

?0 <= s.length <= 5 * 104

?s?由英文字母花鹅、數(shù)字、符號和空格組成

?來源:力扣(LeetCode)

?鏈接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters

?*/

-(int)lengthOfLongestSubstring:(NSString *)s{

? ? if(s.length==0){

? ? ? ? return0;

? ? }else{

? ? ? ? intfast = 1;

? ? ? ? intslow = 0;

? ? ? ? intresult = 0;

? ? ? ? NSMutableArray *resultArray = [NSMutableArray array]; //用于保存結(jié)果

? ? ? ? NSString*resultstring = [s substringWithRange:NSMakeRange(0, 1)];//自增的結(jié)果串

? ? ? ? while(fast < s.length) {

? ? ? ? ? ? NSString*fastStr? = [s substringWithRange:NSMakeRange(fast, 1)];//快指針的char

? ? ? ? ? ? if([resultstring containsString:fastStr]){

? ? ? ? ? ? ? ? [resultArray addObject:resultstring];? //加入數(shù)組

? ? ? ? ? ? ? ? NSRange replaceRange = [resultstring rangeOfString:fastStr];//自增串出現(xiàn)重復(fù)的index

? ? ? ? ? ? ? ? int replaceIndex = (int)replaceRange.location;

? ? ? ? ? ? ? ? slow = slow + replaceIndex+1;

? ? ? ? ? ? ? ? resultstring = [s substringWithRange:NSMakeRange(slow, fast-slow+1)];//更新自增串? //Range (loca,len)

? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? resultstring = [NSString stringWithFormat:@"%@%@",resultstring,fastStr];? ////更新自增串

? ? ? ? ? ? }

? ? ? ? ? ? fast++;

? ? ? ? }

//這里我保存了字符串結(jié)果枫浙, 這里可以直接記錄長度 刨肃,我這里采用了數(shù)組

? ? ? ? if(resultstring.length> 0){

? ? ? ? ? ? [resultArray addObject:resultstring];

? ? ? ? ? ? for(NSString*item in resultArray){

? ? ? ? ? ? ? ? result = item.length> result ? (int)item.length: result;

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? return result;

? ? }

}

時間負(fù)責(zé)度為0(n*n) ,我這個算法運用到快慢指針箩帚,



題目鏈接:https://leetcode-cn.com/problems/remove-colored-pieces-if-both-neighbors-are-the-same-color/

每日一題:

主要難點在理解題干真友,看了幾遍從三元橋想到海淀黃莊。紧帕。盔然。

1.只能操作相鄰都是相同元素,比如AAA組合的中間A是嗜。(導(dǎo)致如果AB組合被大亂掉相當(dāng)于是多余元素)愈案。

2.不能操作兩端的的元素(元素的)就是對三個以上相鄰 元素的補充。

3.輸贏問題就轉(zhuǎn)換成了鹅搪,找到A站绪,B各自三個相同排列的組合出現(xiàn)的次數(shù),并且參與次數(shù)比較丽柿。(次數(shù)相同恢准,先手的輸,即Alice false);

oc代碼:

-(BOOL)WhoWinsTheGame:(NSString*)gameString{

? ? BOOL flag =false;

? ? if(gameString.length<= 2){

? ? ? ? return flag;

? ? }else{

? ? ? ? intAtime = 0;//A可執(zhí)行次數(shù)

? ? ? ? intBtime = 0;//B可執(zhí)行次數(shù)

? ? ? ? //快慢指針

? ? ? ? intfast = 1;

? ? ? ? intslow = 0;

? ? ? ? while(fast < gameString.length){

? ? ? ? ? ? charfastChar = [gameString characterAtIndex:fast];

? ? ? ? ? ? charslowChar = [gameString characterAtIndex:slow];

? ? ? ? ? ? if(slowChar == fastChar){

? ? ? ? ? ? ? ? if(fast - slow >=2){//下標(biāo)標(biāo)記 如果是超過2證明有三個連續(xù)字符

? ? ? ? ? ? ? ? ? ? if(fastChar == 'A'){

? ? ? ? ? ? ? ? ? ? ? ? Atime++;

? ? ? ? ? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? ? ? ? ? Btime++;

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? fast++;

? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? slow = fast;

? ? ? ? ? ? ? ? fast ++;

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? if(Atime > Btime){? //相等是先手的輸

? ? ? ? ? ? flag =true;

? ? ? ? }

? ? ? ? return flag;

? ? }

}

時間復(fù)雜度 O(n) , n是輸入字符串長度?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末甫题,一起剝皮案震驚了整個濱河市馁筐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌坠非,老刑警劉巖敏沉,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異麻顶,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)舱卡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門辅肾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人轮锥,你說我怎么就攤上這事矫钓。” “怎么了匆瓜?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵承璃,是天一觀的道長烛恤。 經(jīng)常有香客問我古今,道長贺归,這世上最難降的妖魔是什么畏梆? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任蟹腾,我火速辦了婚禮煌珊,結(jié)果婚禮上私杜,老公的妹妹穿的比我還像新娘蚕键。我一直安慰自己,他們只是感情好衰粹,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布锣光。 她就那樣靜靜地躺著,像睡著了一般铝耻。 火紅的嫁衣襯著肌膚如雪誊爹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天瓢捉,我揣著相機(jī)與錄音频丘,去河邊找鬼。 笑死泊柬,一個胖子當(dāng)著我的面吹牛椎镣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播兽赁,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼状答,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了刀崖?” 一聲冷哼從身側(cè)響起惊科,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎亮钦,沒想到半個月后馆截,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡蜂莉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年蜡娶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片映穗。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡窖张,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蚁滋,到底是詐尸還是另有隱情宿接,我是刑警寧澤赘淮,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站睦霎,受9級特大地震影響梢卸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜副女,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一蛤高、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧肮塞,春花似錦襟齿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至拷窜,卻和暖如春开皿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背篮昧。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工赋荆, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人懊昨。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓窄潭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親酵颁。 傳聞我的和親對象是個殘疾皇子嫉你,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容