left函数

LeetCode278:First Bad Version

强颜欢笑 提交于 2019-12-08 22:25:43
需求: 您是一位产品经理,目前正在领导一个团队开发新产品。不幸的是,你们最新版本的产品没有通过质量检查。由于每个版本都是在前一个版本的基础上开发的,所以一个坏版本之后的所有版本也是坏的。 假设你有n个版本[1,2,…你想找出第一个坏的,它会导致下面所有的坏。 你有一个API bool isBadVersion(版本),它会返回版本是否坏。实现一个函数来查找第一个坏版本。您应该尽量减少对API的调用。 测试用例: #1: true true true true false 输出:4 #2:true false 输出:2 #3:false false 输出: 1 代码: / The isBadVersion API is defined in the parent class VersionControl. boolean isBadVersion(int version); / public class Solution extends VersionControl { public int firstBadVersion(int n) { int left = 1; int right = n; while (left < right) { int mid = left + (right - left) / 2; if(isBadVersion(mid)) { right =

二分与三分

廉价感情. 提交于 2019-12-06 15:17:20
分值的思想 二分查找与二分答案 OPJ 二分01 求最接近元素 用longlong #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; long long n; long long a1[100005]; int m; long long a2[10005]; int main( ){ scanf("%lld",&n); for(int i=1;i<=n;i++){ scanf("%lld",&a1[i]); } scanf("%d",&m); for(int i=1;i<=m;i++){ scanf("%lld",&a2[i]); } for(int i=1;i<=m;i++){ int left=1,right=n; int mid=0; while(left<right-1){ mid=(left+right)/2; if(a1[mid]<a2[i]){ left=mid; } else{ //else{ right=mid; } } //if(a1[mid]==a2[j]) printf("%lld\n",mid); if(a2[i]-a1[left]<=a1[right]-a2[i]){

Project Euler 69: Totient maximum

删除回忆录丶 提交于 2019-12-06 02:47:12
欧拉函数 \(\varphi(n)\) 计算小于 \(n\) 的自然数中和 \(n\) 互质的数的个数,比如1, 2, 4, 5, 7和8都小于9并且和9素质,因此 \(\varphi(9)=6\) 。下表列示了小于等于十的数的欧拉函数值: 可以看到对于 \(n\le10\) 当 \(n=6\) 时 \(n/\varphi(n)\) 取得最大值,求对于 \(n\le1,000,000\) ,在 \(n\) 等于多少时 \(n/\varphi(n)\) 取得最大值? 分析:欧拉函数是数论中经常会遇到的一个函数,我们可以通过一个公式将它和数 \(n\) 的质因数连接起来。一般地,对于正整数 \(n\) ,设 \(p|n\) 表示所有整除 \(n\) 的质数,实际上就是 \(n\) 的质因数,则我们有: \[ {\displaystyle \varphi (n)=n\prod _{p\mid n}\left(1-{\frac {1}{p}}\right),} \] 如对于 \(\varphi(36)\) ,可以如下计算: \[ {\displaystyle \varphi (36)=\varphi \left(2^{2}3^{2}\right)=36\left(1-{\tfrac {1}{2}}\right)\left(1-{\tfrac {1}{3}}\right)=36\cdot {

每日一题_191124

余生长醉 提交于 2019-12-05 04:38:24
已知函数 \(f(x)=(x-3)\mathrm{e}^x-x^2+4x\) , \(g(x)=x\mathrm{e}^x-5x+1\) . \((1)\) 证明: \(f(x)<g(x)\) ; \((2)\) 若 \(\forall x<3,f(x)\leqslant ax-3\) ,求实数 \(a\) 的值. 解析: \((1)\) 由题即证 \[ \forall x\in\mathbb{R},\left(x^2-9x+1\right)\mathrm{e}^{-x}+3>0.\] 记上述不等式左侧为 \(h(x)\) ,求导可得 \[ h'(x)=\left(-x^2+11x-10\right)\mathrm{e}^{-x}=-\left(x-1\right)\left(x-10\right)\mathrm{e}^{-x}.\] 因此 \[ \begin{cases} & \forall x\leqslant 10,h(x)\geqslant h(1)=-7\mathrm{e}^{-1}+3>0,\\ & \forall x>10,h(x)=\left[x(x-9)+1\right]\mathrm{e}^{-x}+3>0. \end{cases} \] 综上原不等式得证. \((2)\) 构造函数 \[ F(x)=f(x)-ax+3=(x-3)\mathrm{e}^x-x^2

leetcode.数组.27移除元素-Java

本小妞迷上赌 提交于 2019-12-04 19:57:15
1. 具体题目 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 示例 1:  给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。 2. 思路分析 将数组中数值为 val 的元素赋值为当前数组尾部元素值:设置前后指针 left & right,left 遍历数组,遇到数值为 val 的元素就将其赋值为 right 所指的元素的值,当 left 与 right 相遇时循环结束。思路比较简单,但需要注意代码细节。 3. 代码 1 public int removeElement(int[] nums, int val) { 2 int left = 0,; 3 int right = nums.length; //*注意right指针移动过程 4 while(left < right){ 5 if(nums[left] == val){ 6 nums[left] = nums[right - 1]; //** 7 right--; //赋值后left不变,需要再经历一次判断

删除排序数组中的重复项 II

痞子三分冷 提交于 2019-12-04 18:36:47
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定 nums = [1,1,1,2,2,3], 函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。 你不需要考虑数组中超出新长度后面的元素。 示例 2: 给定 nums = [0,0,1,1,1,1,2,3,3], 函数应返回新长度 length = 7, 并且原数组的前五个元素被修改为 0, 0, 1, 1, 2, 3, 3 。 你不需要考虑数组中超出新长度后面的元素。 /** * @param {number[]} nums * @return {number} */ function check (a,b){ return a-b; } var removeDuplicates = function(nums) { let left = 0; nums.sort(check); while(left<nums.length){ let right = left +1; let length = nums.length; //找打不相等的元素的位置 while(left<nums.length&&nums[left]=

leetcode.字符串.344反转字符串-Java

本秂侑毒 提交于 2019-12-04 03:34:28
1. 具体题目 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。 示例 1:输入:["h","e","l","l","o"]  输出:["o","l","l","e","h"] 示例 2:输入:["H","a","n","n","a","h"]  输出:["h","a","n","n","a","H"] 2. 思路分析 双指针,首尾交换 3. 代码 1 public void reverseString(char[] s) { 2 int left = 0; 3 int right = s.length - 1; 4 while(left < right){ 5 char temp = s[left]; 6 s[left] = s[right]; 7 s[right] = temp; 8 left++; 9 right--; 10 } 11 } 来源: https://www.cnblogs.com/XRH2019/p/11829010.html

Comet OJ - Contest #8 E.神奇函数

前提是你 提交于 2019-12-04 01:40:54
旧题解: https://blog.csdn.net/gmh77/article/details/99066792#commentBox 之前写的有些奇怪, 不能体现这道题的sb 所以再推一遍 \(\because n=\sum_{d \mid n}{\varphi(d)}\) \(\therefore \sum_{i=1}^{n}{f(i)}=\sum_{n}{\prod{{a_i}^{\left \lfloor \frac{p_i}{2} \right \rfloor}}}\) \(=\sum_{n}{\sum_{\prod{{a_i}^{\left \lfloor \frac{p_i}{2} \right \rfloor}} \mid d}{\varphi(d)}}\) \(=\sum_{d=1}^{\left \lfloor \sqrt{n} \right \rfloor}{\varphi(d)\sum_{n}{[d^2\mid n]}}\) $ \(=\sum_{d=1}^{\left \lfloor \sqrt{n} \right \rfloor}{\varphi(d)*\left \lfloor \frac{n}{d^2} \right \rfloor}\) 来源: https://www.cnblogs.com/gmh77/p/11827264.html

Java 容器 & 泛型:四、Colletions.sort 和 Arrays.sort 的算法

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-03 23:07:00
Writer:BYSocket(泥沙砖瓦浆木匠) 微博: BYSocket 豆瓣: BYSocket 本来准备讲 Map集合 ,还是喜欢学到哪里总结吧。最近面试期准备准备,我是一员,成功被阿里在线笔试秒杀回绝。平常心,继续努力。这次带来 Collections 和 Arrays 类中的经典算法剖析。 一、Colletions和Arrays Collentions 此类完全是服务容器的”包装器“。提供了一些操作或者返回容器的静态方法。而Arrays是用来操作数组的各种方法。其中它们的联系在于其中的Sort方法,也就是这次博客的主题。 二、插入,快速、归并基本算法 ① 插入排序 {a1},{a2,a3,a4,…,an}} {{a1⑴,a2⑴},{a3⑴,a4⑴ …,an⑴}} … {{a1(n-1),a2(n-1) ,…},{an(n-1)}} 原理及记忆方法: 每次处理就是将无序数列的第一个元素与有序数列的元素从后往前逐个进行比较,找出插入位置,将该元素插入到有序数列的合适位置中。这通俗的是找座位思想。Java版实现如下 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 import java.util.Arrays; public class InsertionSort {

例11 整数排序

蓝咒 提交于 2019-12-03 21:30:21
#给出一组整数,将其按照升序排序 #例如给出[3,2,1,4,5],排序后的结果为[1,2,3,4,5] #参数A是一个整数数组 #返回一个整数数组 class Solution: def sortIntegers2(self,A): self.quickSort(A,0,len(A)-1) def quickSort(self,A,start,end): if start>=end: return left,right=start,end pivot=A[int((start+end)/2)] while left<=right: while left<=right and A[left] < pivot: left += 1 while left<=right and A[right]>pivot: right-=1 if left<=right: A[left],A[right]=A[right],A[left] left+=1 right-=1 self .quickSort(A,start,right) self.quickSort(A,left,end) #主函数 if __name__ == "__main__": A = [3,2,1,4,5] print('初始数组:',A) solution = Solution() solution.sortIntegers2