datawhale八月组队学习(2)--LeetCode刷题

本次加入datawhale组织的八月份组队学习,选择了力扣刷题的小组,刷点题目,让自己的脑子不那么僵化
力扣链接https://leetcode-cn.com/


35.搜索插入位置

非常简单的查找问题,给定的数组已经是排好序了的,因此直接使用二分查找。
在这里插入图片描述

int searchInsert(int* nums, int numsSize, int target)
{
    
    
  if(numsSize==0) 
    return 0;
    int low=0,high=numsSize-1,index=numsSize/2;
    while(low<high)
    {
    
    
        if(target==nums[index]) return index;
        if(target>nums[index]) low=index+1;
        else high=index-1;
        index=(high+low)/2;
    }
    if(target>nums[index]) return index+1;
    return index;
}

202. 快乐数

在这里插入图片描述
简单粗暴解法

bool isHappy(int n)
{
    
    
    while(n != 1)
    {
    
    
        int ans = 0;
        while(n)
        {
    
    
            ans += pow(n % 10 , 2);
            n /= 10;
        }
        if(ans == 4)
            return false;
        n = ans;
    }
    return true;   
}

在这里插入图片描述


205.同构字符串

在这里插入图片描述
没想到遇到了之前完成过的题目

bool isIsomorphic(char * s, char * t)
{
    
       
int flag=0;
	int num = 0;
	int x1[128] = {
    
     0 }, x2[128] = {
    
     0 };
	for (int i = 0; s[i] != 0; i++)
	{
    
    
		num++;
		if(x1[(int)s[i]]==0)
			x1[(int)s[i] ] =num;
		if (x2[(int)t[i] ] == 0)
			x2[(int)t[i] ] = num;
	}
	for (int n = 0; s[n] != 0; n++)
	{
    
    
		if (x1[(int)s[n]] != x2[(int)t[n] ])
			flag = 1;
	}
	if (flag == 1)
		return false;
	else
		return true;
}

242.有效的字母异位词

在这里插入图片描述

bool isAnagram(char *s, char *t)
{
    
    
	int i, x[26] = {
    
     0 }, y[26] = {
    
     0 };
	for (i = 0; s[i] != '\0'; i++)	x[s[i] - 'a']++;	
	for (i = 0; t[i] != '\0'; i++)	y[t[i] - 'a']++;	
	for (i = 0; i < 26; i++)							
		if (x[i] != y[i])	return false;
	return true;										
}
  • 同样是很简单的一道题目,记录字母,以及对应的数量,比较
    在这里插入图片描述

290.单词规律

在这里插入图片描述

  • 和字符串有关的题目,用C语言做实在是效率太低了(编写代码的效率)
class Solution(object):
    def wordPattern(self, pattern, str):
        """
        :type pattern: str
        :type str: str
        :rtype: bool
        """
        s1 = str.split()

        return len(s1)==len(pattern) and len(set(zip(pattern, s1))) == len(set(list(pattern))) == len(set(s1))

在这里插入图片描述


349. 两个数组的交集

在这里插入图片描述

扫描二维码关注公众号,回复: 12083147 查看本文章
  • 又是一题用python写,可以很快完成的题目
class Solution(object):
    def intersection(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: List[int]
        """
        return list(set(nums1)&set(nums2))

350. 两个数组的交集2

  • 依旧是python解题,虽然效率相比其他人相当低
class Solution(object):
    def intersect(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: List[int]
        """
        inter = set(nums1) & set(nums2)
        l = []
        for i in inter:
            l += [i] * min(nums1.count(i), nums2.count(i))  
        return l

410. 分割数组的最大值

  • 一道困难级别的题目,卑微的我又抄起了答案,答案来自评论区大佬Celia
class Solution(object):
    def splitArray(self, nums, m):
        """
        :type nums: List[int]
        :type m: int
        :rtype: int
        """
        # max(nums), sum(nums)
        if len(nums) == m:
            return max(nums)
        
        lo, hi = max(nums), sum(nums)
        while(lo < hi):
            mid = (lo + hi) // 2 # 最大和
            
            #------以下在模拟划分子数组的过程
            temp, cnt = 0, 1
            for num in nums:
                temp += num
                # cnt += 1
                if temp > mid:#说明当前这个子数组的和已经超过了允许的最大值mid,需要把当前元素放在下一个子数组里
                    temp = num
                    cnt += 1
            # print temp, cnt, mid
            #------以上在模拟划分子数组的过程
            
            if cnt > m: #说明分出了比要求多的子数组,多切了几刀,说明mid应该加大,这样能使子数组的个数减少
                lo = mid + 1
            elif cnt <= m:
                hi = mid

                
        return lo

451. 根据字符出现频率排序

class Solution(object):
    def frequencySort(self, s):
        c = collections.Counter(s)
        tmp = [[k, v] for k, v in c.items()]
        tmp.sort(key=lambda x: x[1], reverse=True)
        res = ""
        for i in tmp:
            res += i[0] * i[1]
        return res
  • python 调包解题法

540. 有序数组中的单一元素

  • 暴力解题法
class Solution(object):
    def singleNonDuplicate(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        return sum(set(nums))*2 - sum(nums)

猜你喜欢

转载自blog.csdn.net/qq_48081601/article/details/108231486
今日推荐