leetcode未做出题小结1

3人阅读 评论(0) 收藏 举报
分类:

解法均来自网络:

496.下一个更大元素1

给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。

nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 大的元素。如果不存在,对应位置输出-1。

示例 1:

输入: nums1 = [4,1,2], nums2 = [1,3,4,2].
输出: [-1,3,-1]
解释:
    对于num1中的数字4,你无法在第二个数组中找到下一个更大的数字,因此输出 -1。
    对于num1中的数字1,第二个数组中数字1右边的下一个较大数字是 3。
    对于num1中的数字2,第二个数组中没有下一个更大的数字,因此输出 -1。

示例 2:

输入: nums1 = [2,4], nums2 = [1,2,3,4].
输出: [3,-1]
解释:
    对于num1中的数字2,第二个数组中的下一个较大数字是3。
    对于num1中的数字4,第二个数组中没有下一个更大的数字,因此输出 -1。

注意:

  1. nums1nums2中所有元素是唯一的。
  2. nums1nums2 的数组大小都不超过1000。

解法:

维持一个非递增数组,存储在栈中,当下一个元素比栈顶大时,依次出栈,直到栈顶大于等于该元素时,停止出栈,该元素入栈,此时所有出栈的元素的下一个更大元素为该元素,存储在hashmap中,时间复杂度为O(n)

class Solution {
public:
    vector<int> nextGreaterElement(vector<int>& findNums, vector<int>& nums) {
        stack<int> s;
        unordered_map<int, int> m;
        for (int n : nums) {
            while (s.size() && s.top() < n) {
                m[s.top()] = n;
                s.pop();
            }
            s.push(n);
        }
        vector<int> ans;
        for (int n : findNums) ans.push_back(m.count(n) ? m[n] : -1);
        return ans;
    }
};


16.最接近的三数之和

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.

与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).

解法:先排序。设个diff为三数之和sumtarget的绝对差,从表头开始,对剩下的做两数之和,当diff比预设的mindiff小时,替换mindiff。如果sum>targetright左移,反之右移(因为已经排好序)。

class Solution:
    def threeSumClosest(self, nums, target):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        mindiff = 10000
        nums.sort()
        res = 0
        for i in range(len(nums)):
            left = i+1
            right = len(nums)-1
            while left < right:
                sum = nums[left] + nums[right] + nums[i]
                diff = abs(target - sum)
                if diff < mindiff:
                    mindiff = diff
                    res = sum
                if target == sum:
                    return sum
                elif sum < target:
                    left += 1
                else:
                    right -= 1                      

        return res

204.计数质数


计算所有小于非负数整数 的质数数量。


个人解法:n^2,未能通过 

class Solution:
    def countPrimes(self, n):
        """
        :type n: int
        :rtype: int
        """
        if n<=2:
            return 0
        primes=[2]
        i=3
        while i <n:
            check=0
            for j in primes:
                if i%j==0:
                    check=1
                    break
                if j*2 > i:
                        break
            if check==0 :
                primes.append(i)
            i=i+2
        return len(primes)

更好的方法:埃拉托斯特尼筛法Sieve of Eratosthenes

class Solution:
    def countPrimes(self, n):  
        isPrime = [True] * max(n, 2)  
        isPrime[0], isPrime[1] = False, False  
        x = 2  
        while x * x < n:  
            if isPrime[x]:  
                p = x * x  
                while p < n:  
                    isPrime[p] = False  
                    p += x  
            x += 1  
        return sum(isPrime) 

查看评论

LeetCode 高频题目

Leetcode Single Number II  Leetcode Single Number Leetcode Best Time to Buy a...
  • imabluefish
  • imabluefish
  • 2014-08-25 17:22:39
  • 4789

今日头条 添加最小题目数

题目: 头条的2017校招开始了!为了这次校招,我们组织了一个规模宏大的出题团队,每个出题人都出了一些有趣的题目,而我们现在想把这些题目组合成若干场考试出来,在选题之前,我们对题目进行了盲审,并定出...
  • xclfafa
  • xclfafa
  • 2017-08-10 11:23:41
  • 293

leetcode面试频率

leetcode题目面试频率总结
  • Alpaca12
  • Alpaca12
  • 2016-06-12 16:33:50
  • 1697

LeetCode 问题汇总(算法,难度,频率)

Id Question Difficulty Frequency Data Structures Algorithms 1 T...
  • sbitswc
  • sbitswc
  • 2014-03-13 11:58:30
  • 12365

c#做的出题程序(完整源代码)

  • 2008年11月21日 16:50
  • 33KB
  • 下载

C#自动出题小学算术界面

  • 2012年06月02日 15:59
  • 40KB
  • 下载

LeetCode动态规划归纳

LeetCode动态规划归纳最近刷了很多动态规划的问题,归纳一下做动态规划的题的方法。动态规划很多题目是解决最多最少最大最小的问题。动态规划问题的基本做法是: 确定递推量 推出递推式 确定边界 在解决...
  • King_Like_Coding
  • King_Like_Coding
  • 2016-10-23 20:14:59
  • 614

刷LeetCode刷LeetCode刷LeetCode刷LeetCode

  • 2018年01月09日 15:07
  • 1.55MB
  • 下载

用数据库做的试题库管理系统

  • 2009年06月15日 20:24
  • 558KB
  • 下载

一二年级口算题出题系统

  • 2014年04月01日 09:40
  • 538KB
  • 下载
    个人资料
    等级:
    访问量: 12
    积分: 30
    排名: 199万+
    文章分类
    文章存档