相似的RGB颜色——算法面试刷题3(for google),考察二分
在本题中,每个大写字母代表从“0”到“f”的一些十六进制数字。
红绿蓝三元色#AABBCC
可以简写为#ABC
。 例如,#15c
是颜色#1155cc
的简写。
现在,假设两种颜色#ABCDEF
和#UVWXYZ
之间的相似性是-(AB - UV) ^ 2 - (CD - WX) ^ 2 - (EF - YZ) ^ 2
。
给定颜色#ABCDEF
,返回与#ABCDEF
最相似且含有一个简写的7字符颜色(也就是说,它可以用类似#XYZ
的形式表示)。
color
是一个长度为7
的字符串。color
是一个合法的RGB颜色: 对于每一个i > 0
,color[i]
是一个0
到f
的十六进制数字。- 任何一个有最高相似度的答案都是正确的。
- 所有的输入输出都是小写字母,输出应为7个字符的字符串。
您在真实的面试中是否遇到过这个题?
样例
样例1:
输入: color = "#09f166"
输出: "#11ee66"
解释:
二者相似程度为 -(0x09 - 0x11)^2 -(0xf1 - 0xee)^2 - (0x66 - 0x66)^2 = -64 -9 -0 = -73.
这是所有能够简写的颜色里最接近的颜色。
样例2:
输入: color = "#010000"
输出: "#000000"
解释:
二者相似程度为 -(0x01 - 0x10)^2 -(0x00 - 0x00)^2 - (0x00 - 0x00)^2 = -1 -0 -0 = -1.
这是所有能够简写的颜色里最接近的颜色。
我的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | class Solution: """ @param color: the given color @return: a 7 character color that is most similar to the given color """ def similarRGB( self , color): # Write your code here ans = "#" for i in ( 1 , 3 , 5 ): s = self .find_nearest_color(color[i:i + 2 ]) ans + = s return ans def to_hex( self , i): return hex (i)[ 2 :] def find_nearest_color( self , hex_color): arr = [ 0x11 , 0x22 , 0x33 , 0x44 , 0x55 , 0x66 , 0x77 , 0x88 , 0x99 , 0xaa , 0xbb , 0xcc , 0xdd , 0xee , 0xff ] hex_color = int (hex_color, 16 ) l, r = 0 , len (arr) - 1 while l + 1 < r: mid = (l + r) / / 2 if arr[mid] < = hex_color: l = mid else : r = mid if arr[l] = = hex_color: return self .to_hex(arr[l]) elif arr[r] = = hex_color: return self .to_hex(arr[r]) else : if abs (arr[l] - hex_color) < abs (arr[r] - hex_color): return self .to_hex(arr[l]) else : return self .to_hex(arr[r]) |
参考代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class Solution: """ @param color: the given color @return: a 7 character color that is most similar to the given color """ #形如AA的十六进制数必定是17的倍数,我们只要判断离原数最接近的17的倍数是多少即可。 def similarRGB( self , color): # Write your code here def geClosest(s): return min ([ '00' , '11' , '22' , '33' , '44' , '55' , '66' , '77' , '88' , '99' , 'aa' , 'bb' , 'cc' , 'dd' , 'ee' , 'ff' ], key = lambda x: abs ( int (s, 16 ) - int (x, 16 ))) res = [geClosest(color[i:i + 2 ]) for i in range ( 1 , len (color), 2 )] return '#' + ''.join(res) |
值得学习的地方:
1、直接暴力,使用min
2、字符串拼接join
标签:
python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2018-04-20 DNS 负载均衡
2017-04-20 美国诚实签经验——我们准备了XX万的存款,这足以应付我预算表中涉及的所有开支,如果有意外情况我们的资金不足以应付,我们双方的父母也会支援我们,绝对不会占用美国的任何福利
2017-04-20 美国诚实签经验——户口本!!!
2017-04-20 美国诚实签经验——是不是户籍和常住作业地在一起?是不是有居住证?明白居住证信息吗?英语超卓,应变能力强,有幽默感 10分
2017-04-20 美国诚实签经验——中英文行程单、往返机票、用英语面试的申请者通过率>用中文面试的申请者的通过率、一直保持着微笑,看上去很自信,也很诚恳、户口簿带上最好
2017-04-20 重新定义数据库历史的时刻——时间序列数据库Schwartz认为InfluxDB最有前途,Elasticsearch也不错