所在的位置: swift >> swift资源 >> 算法练习Swift

算法练习Swift

公益中国援助定点白癜风医院 http://news.39.net/bjzkhbzy/180415/6169081.html

随机获取Leetcode解题

.按列翻转得到最大值等行数

给定mxn矩阵matrix。

你可以从中选出任意数量的列并翻转其上的每个单元格。(即翻转后,单元格的值从0变成1,或者从1变为0。)

返回经过一些翻转后,行与行之间所有值都相等的最大行数。

思路:

行与行之间所有值都相等,换个思路就是,就是说这两行所有相同位置的值要么都是相同的,要么都是相反的。把每行看出一个二进制,则要么数值相同,要么按位异或后数值相同。

同一异或对比的初始数字为0。首数字为1的行整行异或。最后map每个列值出现的次数。

////leecode.swift//SwiftPritice////CreatedbyHarryon/3/30.//importFoundationclassRowsAfterFlips{functest(){letdate=Date()letmatrixx=[[1,0,0,0,1,1,1,0,1,1,1],[1,0,0,0,1,0,0,0,1,0,0],[1,0,0,0,1,1,1,0,1,1,1],[1,0,0,0,1,0,0,0,1,0,0],[1,1,1,0,1,1,1,0,1,1,1]]print("RowsAfterFlips:",maxEqualRowsAfterFlips(matrixx),"-",Date().timeIntervalSince(date))}fileprivatefuncmaxEqualRowsAfterFlips(_matrix:[[Int]])-Int{varmap=[String:Int]()matrix.forEach{arrinvarkey=""ifarr[0]==0{key=arrToString(arr)}else{varlist=[Int]()forvinarr{list.append(v^1)}key=arrToString(list)}ifmap[key]==nil{map[key]=1}else{map[key]=(map[key]??0)+1}}varm=0for(_,v)inmap{m=max(m,v)}returnm}fileprivatefuncarrToString(_arr:[Int])-String{vars=""forvinarr{//s=String(format:"%s%d",s,v)s=s.appending(String(v))}returns}}

在main.swift里

RowsAfterFlips().test()

下边是提交的结果:

88/88个通过测试用例

状态:通过

执行用时:ms

内存消耗:15MB

欢迎大家指正

PS:

异或是个好东西,不少简单算法都会用到它,比如在数组里找不成对的唯一一个数字

预览时标签不可点收录于合集#个上一篇下一篇

转载请注明:http://www.aierlanlan.com/rzgz/15.html

  • 上一篇文章:
  •   
  • 下一篇文章: