在本题中,每个大写字母代表从“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] 是一个 0f的十六进制数字。
  • 任何一个有最高相似度的答案都是正确的。
  • 所有的输入输出都是小写字母,输出应为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.
这是所有能够简写的颜色里最接近的颜色。 我的代码:
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])

参考代码:

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

相似的RGB颜色——算法面试刷题3(for google),考察二分的更多相关文章

  1. 最长绝对文件路径——算法面试刷题1(google),字符串处理,使用tree遍历dfs类似思路

    假设我们通过以下的方式用字符串来抽象我们的文件系统: 字符串"dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext"代表了: dir subdir1 su ...

  2. 有效的括号序列——算法面试刷题4(for google),考察stack

    给定一个字符串所表示的括号序列,包含以下字符: '(', ')', '{', '}', '[' and ']', 判定是否是有效的括号序列. 括号必须依照 "()" 顺序表示, & ...

  3. 回文的范围——算法面试刷题2(for google),考察前缀和

    如果一个正整数的十进制表示(没有前导零)是一个回文字符串(一个前后读取相同的字符串),那么它就是回文.例如,数字5, 77, 363, 4884, 11111, 12121和349943都是回文. 如 ...

  4. 有效单词词广场——算法面试刷题5(for google),考察数学

    给定一个单词序列,检查它是否构成一个有效单词广场.一个有效的单词广场应满足以下条件:对于满足0≤k<max(numRows numColumns)的k,第k行和第k列对应的字符串应该相同,. 给 ...

  5. 数据结构+算法面试100题~~~摘自CSDN

    数据结构+算法面试100题~~~摘自CSDN,作者July 1.把二元查找树转变成排序的双向链表(树) 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调 ...

  6. 安利一个基于Spring Cloud 的面试刷题系统。面试、毕设、项目经验一网打尽

    推荐: 接近100K star 的Java学习/面试指南 Github 95k+点赞的Java面试/学习手册.pdf 今天给小伙伴们推荐一个朋友开源的面试刷题系统. 这篇文章我会从系统架构设计层面详解 ...

  7. 算法笔记刷题1(codeup 1934)

    准备6月份的拼题甲级中(本来现在这两天就考试了,但是因为疫情的原因延期了) 刚刚开始按算法笔记刷题,今天是探索codeup的第一天. 一开始并没有把多点测试当回事,直到一错再错,心态爆炸... 附上我 ...

  8. 2021字节跳动校招秋招算法面试真题解题报告--leetcode19 删除链表的倒数第 n 个结点,内含7种语言答案

    2021字节跳动校招秋招算法面试真题解题报告--leetcode19 删除链表的倒数第 n 个结点,内含7种语言答案 1.题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. ...

  9. 2021字节跳动校招秋招算法面试真题解题报告--leetcode206 反转链表,内含7种语言答案

    206.反转链表 1.题目描述 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1-> ...

随机推荐

  1. 示例, linq分组

    public class HIS_CLIREGISTER : BaseModel{ private String _FBCODE;[StringLength(8)]/// <summary> ...

  2. GRU and LSTM

    门控循环单元(GRU): 背景: 当时间步数较大或者时间步数较小的时候,循环神经网络的梯度较容易出现衰减或者爆炸.虽然裁剪梯度可以应对梯度爆炸, 但是无法解决梯度衰减的问题.正因为如此,循环神经网络在 ...

  3. java正则表达式学习笔记

    Java 正则表达式语法 为了更有效的使用正则表达式,需要了解正则表达式语法.正则表达式语法很复杂,可以写出非常高级的表达式.只有通过大量的练习才能掌握这些语法规则. 本篇文字,我们将通过例子了解正则 ...

  4. 关于IIS的4月26日笔记

    常用命令: 31. regedit.exe----注册表 48. msconfig.exe---系统配置实用程序  80. services.msc---本地服务设置 93. regedit.exe- ...

  5. MyPython

    目录 Python,那些不可不知的事儿 Python简介 Python环境搭建 从Hello World开始 Python中的数据类型 函数 模块 面向对象 More Python,那些不可不知的事儿 ...

  6. 文件和IO流

    摘要:本文主要介绍了Java的文件处理以及常用的IO流操作. 文件操作 概念 File是数据源(保存数据的地方)的一种,可以表示一个文件,也可以表示一个文件目录. File类只能对文件和文件夹进行创建 ...

  7. kubernetes版本融合解决方案

    kubernetes版本融合背景 在kubernetes 1.6版本的基础上进行了深度的定制.而且该版本已经相当稳定.但是随着kubernetes版本迭代,后期使用的如service mesh/kub ...

  8. 创建作业(JOB)

    在SQL Server日常需求处理中,会遇到定时执行或统计数据的需求,这时我们可以通过作业(JOB)来处理,从而通过代理的方式来实现数据的自动处理.一下为SQL Server中创建作业的脚本,供大家参 ...

  9. QString使用正则表达式快速去空格

    //QString去掉空格 QString str; str.remove(QRegExp("\\s"));

  10. nodejs中使用crypto-js先HmacSha1加密后转Base64

    1. 先HmacSha1后Base64 var HmacSha1 = require('crypto-js/hmac-sha1') ;var Base64 = require('crypto-js/e ...