array

剑指offer刷题记录

 ̄綄美尐妖づ 提交于 2020-04-02 14:00:33
记录了剑指offer的刷题过程,一共67道题,题目来源 牛客网-剑指offer 。 1.数组--二维数组中的查找 题目: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路: 左上角为最小值,右下角为最大值,进行二维二分查找 # python class Solution: def Find(self, target, array): w = len(array) for i in range(w): if target in array[i]: return True /* * C++ * 参考 https://www.nowcoder.com/profile/9734827/codeBookDetail?submissionId=12713594 * 矩阵是有序的,从左下角来看,向上数字递减,向右数字递增, * 因此从左下角开始查找,当要查找数字比左下角数字大时。右移 * 要查找数字比左下角数字小时,上移 */ class Solution { public: bool Find(int target, vector<vector<int> > array) { int rowCount = array.size(); int

[leetcode] Next Greater Element

☆樱花仙子☆ 提交于 2020-04-01 00:34:15
今天处理一下一系列题目:Next Greater Element系列。 Next Greater Element I You are given two arrays (without duplicates) nums1 and nums2 where nums1 ’s elements are subset of nums2 . Find all the next greater numbers for nums1 's elements in the corresponding places of nums2 . The Next Greater Number of a number x in nums1 is the first greater number to its right in nums2 . If it does not exist, output -1 for this number. Example 1: Input: nums1 = [4,1,2], nums2 = [1,3,4,2]. Output: [-1,3,-1] Explanation: For number 4 in the first array, you cannot find the next greater number for it in the second array, so

[Algo] 489. Largest SubArray Sum

ⅰ亾dé卋堺 提交于 2020-03-31 08:14:32
Given an unsorted integer array, find the subarray that has the greatest sum. Return the sum and the indices of the left and right boundaries of the subarray. If there are multiple solutions, return the leftmost subarray. Assumptions The given array is not null and has length of at least 1. Examples {2, -1, 4, -2, 1}, the largest subarray sum is 2 + (-1) + 4 = 5. The indices of the left and right boundaries are 0 and 2, respectively. {-2, -1, -3}, the largest subarray sum is -1. The indices of the left and right boundaries are both 1 Return the result in a array as [sum, left, right] public

[LeetCode 1121] Divide Array Into Increasing Sequences

南楼画角 提交于 2020-03-30 03:30:47
Given a non-decreasing array of positive integers nums and an integer K , find out if this array can be divided into one or more disjoint increasing subsequences of length at least K . Example 1: Input: nums = [1,2,2,3,3,4,4], K = 3 Output: true Explanation: The array can be divided into the two subsequences [1,2,3,4] and [2,3,4] with lengths at least 3 each. Example 2: Input: nums = [5,6,6,7,8], K = 3 Output: false Explanation: There is no way to divide the array using the conditions required. Note: 1 <= nums.length <= 10^5 1 <= K <= nums.length 1 <= nums[i] <= 10^5 Algorithm: Do a linear

2020.3.25阿里笔试题

走远了吗. 提交于 2020-03-29 18:47:36
1:题目描述 作者:海森堡CSQ 链接: https://www.nowcoder.com/discuss/391530?type=post&order=time&pos=&page=1 来源:牛客网 第一题,给定一个数组n,比如 5 10 5 4 4 1 7 8 4 0 3 4 9 0 3 从每一列选择一个数,求出后一列减去前一列的绝对值的和的最小值 比如这里就是5 7 5 4 4,所以输出是5 2:解题思路   本地我们经过分析,可以明确发现本列最短路径和下一列最短路径之间有很大的关系,我们可以使用动态规划的思想解决这个问题; 状态定义:如何定义出可以找到转移方程的状态,是这个问题的关键。我们分析发现相邻两列之间的最短路径之间关系如下;假设dp[0],dp[1]和dp[2]分别代表从第一列到达此列的第0行数,第1行数,第2行数的最短路径,那么到达后一列的第0行,第1行和第2行的最短路径和dp[0],dp[1],dp[2]有什么关系尼?显然假设后一列第0行,第1行,第2行的最短路径分别为next[0],next[1],next[2],第0行数据为 n[0],第1行数据为 n[1],第2行数据为 n[2],则有,next[0] = min(abs(dp[0]-n[0]),abs(dp[1]-n[0]),abs(dp[2]-n[0]))。这是什么含义尼?就是本列的三行分别到n[0

面试题五十六:数组中数字出现的次数

天大地大妈咪最大 提交于 2020-03-29 17:42:00
题目一: 数组中只出现一次的两个数字 :除了两个数字只出现过一次,其他都出现两次;要求时间复杂度n 空间复杂度1 方法:由于其他出现两次,所以异或的结果是两个只出现过一次数字的异或结果,结果肯定不为0;那么结果用二进制表示中的第一个‘1’的位置,对数组进行分类,该位置为1的和0的,分为两个数组,此时 这两个数组分别 求只出现过一次的那个数 就可以的出了; static void FindNumsAppearOnce(int []date) { if(date==null||date.length<2) return ; int re=0;//全部异或的结果 for(int i=0;i<date.length;i++) re^=date[i]; //寻找结果中第一位为1的位置 int indexof=0; while(re!=0) { if((re&1)==1) break; indexof++; re>>=1; } re=1<<indexof; //根据这个位置进行分组异或 int num1=0,num2=0; for(int i=0;i<date.length;i++) { if((date[i]&re)==0) num1^=date[i]; else num2^=date[i]; } System.out.println(num1); System.out.println

LeetCode——Next Greater Element I

筅森魡賤 提交于 2020-03-29 15:36:37
LeetCode——Next Greater Element I Question You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subset of nums2. Find all the next greater numbers for nums1's elements in the corresponding places of nums2. The Next Greater Number of a number x in nums1 is the first greater number to its right in nums2. If it does not exist, output -1 for this number. Example 1: Input: nums1 = [4,1,2], nums2 = [1,3,4,2]. Output: [-1,3,-1] Explanation: For number 4 in the first array, you cannot find the next greater number for it in the second array, so output -1. For number 1

数组元素之和

久未见 提交于 2020-03-29 15:02:24
1:题目描述 题目描述 给定排序数组arr和整数k,不重复打印arr中所有相加和为k的不降序二元组 例如, arr = [-8, -4, -3, 0, 1, 2, 4, 5, 8, 9], k = 10,打印结果为: 1, 9 2, 8 [要求] 时间复杂度为 O(n) O ( n ),空间复杂度为 O(1) O ( 1 ) 输入描述: 第一行有两个整数n, k接下来一行有n个整数表示数组内的元素 输出描述: 输出若干行,每行两个整数表示答案按二元组从小到大的顺序输出(二元组大小比较方式为每个依次比较二元组内每个数) 示例1 输入 复制 10 10 -8 -4 -3 0 1 2 4 5 8 9 输出 复制 1 9 2 8 2:题目分析 这是一道双指针的问题,我们可以分析知道从左右指针开始寻找合适的数组元素即可,只要找到了,就输出,同时将左右指针分别加一和减一。即可 3:代码示例 package No3; import java.util.Scanner; /** * @author :dazhu * @date :Created in 2020/3/29 13:46 * @description: * @modified By: * @version: $ */ public class Main { public static void main(String[]args){

【leetcode】1389. Create Target Array in the Given Order

送分小仙女□ 提交于 2020-03-29 07:32:10
题目如下: Given two arrays of integers nums and index . Your task is to create target array under the following rules: Initially target array is empty. From left to right read nums[i] and index[i], insert at index index[i] the value nums[i] in target array. Repeat the previous step until there are no elements to read in nums and index. Return the target array. It is guaranteed that the insertion operations will be valid. Example 1: Input: nums = [0,1,2,3,4], index = [0,1,2,2,1] Output: [0,4,1,3,2] Explanation: nums index target 0 0 [0] 1 1 [0,1] 2 2 [0,1,2] 3 2 [0,1,3,2] 4 1 [0,4,1,3,2] Example 2:

for in循环介绍以及陷阱

孤街醉人 提交于 2020-03-27 05:17:13
大家都知道在JavaScript中提供了两种方式迭代对象: (1)for 循环; (2)for..in循环; 使用for循环进行迭代数组对象,想必大家都已经司空见惯了。但是,使用for.. in循环时,大家可要注意了,为什么这么说呢?大家听我娓娓道来.... javascript提供了一种特殊的循环(也就是for .. in循环),用来迭代对象的属性或数组的每个元素,for...in循环中的循环计数器是字符串,而不是数字。它包含当前属性的名称或当前数组元素的索引。 案例一: //使用for..in循环遍历对象属性 varperson={ name: "Admin", age: 21, address:"shandong" }; for(vari in person){ console.log(i); } 执行结果为: name age address 当遍历一个对象的时候,变量 i 也就是循环计数器 为 对象的属性名 //使用for..in循环遍历数组 vararray = ["admin","manager","db"] for(vari in array){ console.log(i); } 执行结果: 0 1 2 当遍历一个数组的时候,变量 i 也就是循环计数器 为 当前数组元素的索引 案例二: 但是,现在看来for .. in循环还挺好用啊,不过,别高兴太早