![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
口袋里的星星
爱拼才会赢
展开
-
34. 在排序数组中查找元素的第一个和最后一个位置 二分查找
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: [-1,-1]解题思路分别用二分查找来寻找左边界和右边界,时间复杂度为O(logn)原创 2020-08-26 19:36:31 · 119 阅读 · 0 评论 -
跳台阶 变态跳台阶 斐波那契数列
斐波那契数列1,1,2,3,5,8…递推式为: f(n)=f(n-1)+f(n-2)青蛙跳台阶一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果。思路青蛙的最后一次跳法只有两种:一阶和二阶,所以 f(n)=f(n-1)+f(n-2),其实就是斐波那契数列,修改一下0,1的元素和输出的数组下标就可以了class Solution: def fib(self, n: int) -> int: if n==原创 2020-08-17 10:33:24 · 202 阅读 · 1 评论 -
背包问题 416. 分割等和子集
常见的背包问题。给你一个可装载重量为W的背包和N个物品,每个物品有重量和价值两个属性。其中第i个物品的重量为wt[i],价值为val[i],现在让你用这个背包装物品,最多能装的价值是多少?举个简单的例子,输入如下:N = 3, W = 4wt = [2, 1, 3]val = [4, 2, 3]算法返回 6,选择前两件物品装进背包,总重量 3 小于W,可以获得最大价值 6。# 0-1背包问题import sys wt = [2, 1, 3]val = [4, 2, 3]N =原创 2020-08-13 20:45:30 · 197 阅读 · 0 评论 -
排序算法 冒泡排序 快排 归并排序
冒泡排序冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。步骤:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。原创 2020-07-24 21:41:57 · 193 阅读 · 0 评论 -
剑指 Offer 25. 合并两个排序的链表 递归
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4解题思路递归:终止条件:两条链表分别名为 l1 和 l2,当 l1 为空或 l2 为空时结束返回值:每一层调用都返回排序好的链表头本级递归内容:如果 l1 的 val 值更小,则将 l1.next 与排序好的链表头相接,l2 同理# Definition for singly-原创 2020-08-10 16:43:44 · 210 阅读 · 0 评论 -
链表翻转 剑指 Offer 24. 反转链表 shopee笔试 234. 回文链表
剑指 Offer 24. 反转链表定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000解题思路# Definition for singly-linked list.# class ListNode(object):# def __init__(se原创 2020-08-05 21:05:24 · 170 阅读 · 0 评论 -
字节笔试题 剑指 Offer 43. 1~n整数中1出现的次数
输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。示例 1:输入:n = 12输出:5示例 2:输入:n = 13输出:6限制:1 <= n < 2^31解题思路总体思想就是分类,先求所有数中个位是 1 的个数,再求十位是 1 的个数,再求百位是 1 的个数…假设 n = xyzdabc,此时我们求千位是 1 的个数,也就是 d 所在的位置。那么此时有三种情况,原创 2020-07-23 10:44:52 · 155 阅读 · 1 评论