1 案例1 leetcode-----242

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

示例 1:

输入: s = "anagram", t = "nagaram"
输出: true

python版本

方法1:直接排序

方法二:API map计数

方法三:数组模拟hash

 '''
方法1 按照字母序排序 如果一样则是 时间复杂度是nlogN 快排 方法2 数字符串每个字符串字符的个数,也就是使用map来计算{letter:count}
a---->
n---->
r---->
时间复杂度O(N) * 为O(N)
''' class Solution(object):
def isAnagram(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
#方法一
#return sorted(s)==sorted(t) #方法二
'''
dic1,dic2={},{}
for item in s:
dic1[item]=dic1.get(item,)+
for item in t:
dic2[item]=dic2.get(item,)+
return dic1==dic2
'''
#方法三
dic1,dic2=[]*,[]*
for item in s:
dic1[ord(item)-ord('a')]+=
for item in t:
dic2[ord(item)-ord('a')]+=
return dic1==dic2

2 案例2 leetcode------1

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

 class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int] dict1={}
for i in range(,len(nums)):
num=target-nums[i]
if num not in dict1:
dict1[nums[i]]=i
else:
return [dict1[num],i]
"""
hash_map=dict()
for i,x in enumerate(nums):
if target-x in hash_map:
return [i,hash_map[target-x]];
hash_map[x]=i

3 案例3 leetcode---15

给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。

方法1:暴力求解 三层循环 时间复杂度n*n*n

方法2:c= -(a+b)枚举ab两层循环,然后在set中查询-(a+b) 时间复杂度n*n 多了空间复杂度n

方法3:sort find: 整个数组排序o(n*logn),首先先第一层循环取出第一个元素a,然后后面使用二分查找bc两个值,如果存在b+c=a则找到,时间复杂度O(N*N)

python版本:

 class Solution(object):
def threeSum(self, nums):
nums.sort()#先排序
n = len(nums)
res = []
#print(nums)
for i in range(n):
if i > and nums[i] == nums[i-]:
continue
#左右边界
left = i +
right = n -
while left < right:
cur_sum = nums[i] + nums[left] + nums[right]
if cur_sum == :
tmp = [nums[i],nums[left],nums[right]]
res.append(tmp)
#去掉重复的解
while left < right and nums[left] == nums[left+]:
left +=
while left < right and nums[right] == nums[right-]:
right -=
left +=
right -=
elif cur_sum > :
right -=
else:
left +=
return res

c++版本

 class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
int target;
vector<vector<int>> ans;
sort(nums.begin(), nums.end());
for (int i = ; i < nums.size(); i++) {
if (i > && nums[i] == nums[i - ]) continue;
if ((target = nums[i]) > ) break;
int l = i + , r = nums.size() - ;
while (l < r) {
if (nums[l] + nums[r] + target < ) ++l;
else if (nums[l] + nums[r] + target > ) --r;
else {
ans.push_back({target, nums[l], nums[r]});
++l, --r;
while (l < r && nums[l] == nums[l - ]) ++l;
while (l < r && nums[r] == nums[r + ]) --r;
}
}
}
return ans;
}
};

最新文章

  1. VUE 入门基础(8)
  2. ubuntu bless 16字节每行
  3. 修改android应用包名 分类: android 学习笔记 2015-07-16 22:48 4人阅读 评论(0) 收藏
  4. 【转】杭电ACM试题分类
  5. JavaScript 中的事件流和事件处理程序(读书笔记思维导图)
  6. Android常用adb命令
  7. Java compareTo() 方法
  8. vue.js初学,笔记1,安装
  9. WebSphere--基本特性
  10. 文件I/O实践(3) --文件共享与fcntl
  11. SystemUI
  12. 2019春第十周作业Compile Summarize
  13. python自动化开发-[第十天]-线程、协程、socketserver
  14. spring拦截器中修改响应消息头
  15. 设置vim支持gbk
  16. 【DB2】表函数监控数据库
  17. 使用Mysql慢查询日志对有效率问题的SQL进行监控
  18. VPS性能测试(2):内存大小、交换空间、高速缓存、实际使用内存
  19. 【原】Coursera—Andrew Ng机器学习—Week 2 习题—Linear Regression with Multiple Variables 多变量线性回归
  20. npm install --no-bin-links中的参数“no-bin-links”表示什么意思

热门文章

  1. 深度学习Keras框架笔记之激活函数详解
  2. Linux下安装Fiddler
  3. linux下安装Sublime Text3并将它的快捷方式放进启动器中和卸载Sublime
  4. Spring中的applicationContext文件详解
  5. 视觉跟踪:MDnet
  6. 51Node1228序列求和 ——自然数幂和模板&amp;&amp;伯努利数
  7. python -- 连接 orclae cx_Oracle的使用 二
  8. Nginx 和 PHP 和 mysql扩展的安装
  9. Cocos Creator开发hello World
  10. 在GitHub上使用Hexo 搭建自己的博客