#include <iostream> using namespace std; int main() { int arr[3] = { 10, 20, 30 }; cout << arr[-2] << endl; cout << -2[arr] << endl; return 0; } 输出: 4196160 -30 这里arr[-2]超出范围且无效,导致未定义的行为 。 但-2[arr]评估为-30 。 为什么? 不是arr[-2]等于-2[arr] ?
给定一个0和1的数组,find最大的子数组,使得零和1的数量相等。 这需要在O(n)时间和O(1)空间中完成。 我有一个algorithm,它在O(n)时间和O(n)空间。 它使用前缀sum数组并利用这样的事实,即如果0和1的数目相同,那么sumOfSubarray = lengthOfSubarray / 2 #include<iostream> #define M 15 using namespace std; void getSum(int arr[],int prefixsum[],int size) { int i; prefixsum[0]=arr[0]=0; prefixsum[1]=arr[1]; for (i=2;i<=size;i++) { prefixsum[i]=prefixsum[i-1]+arr[i]; } } void find(int a[],int &start,int &end) { while(start < end) { int mid = (start +end )/2; if((end-start+1) == 2 * (a[end] – a[start-1])) break; […]
所以我是AngularJS的新手,我正在尝试构build一个非常简单的列表应用程序,我可以在其中创build一个ng-repeat项目列表,然后将所选项目推送到另一个ng-repeat列表中。 虽然我的问题似乎很简单,但我还是无法find合适的解决scheme。 所以这是简化的标记: <body ng-app="MyApp"> <div id="MyApp" ng-controller="mainController"> <div id="AddItem"> <h3>Add Item</h3> <input value="1" type="number" placeholder="1" ng-model="itemAmount"> <input value="" type="text" placeholder="Name of Item" ng-model="itemName"> <br/> <button ng-click="addItem()">Add to list</button> </div> <!– begin: LIST OF CHECKED ITEMS –> <div id="CheckedList"> <h3>Checked Items: {{getTotalCheckedItems()}}</h3> <h4>Checked:</h4> <table> <tr ng-repeat="item in checked" class="item-checked"> <td><b>amount:</b> {{item.amount}} -</td> <td><b>name:</b> {{item.name}} -</td> […]
我正在寻找转换Java字符数组到一个字节数组而不创build一个中间String ,因为字符数组包含一个密码。 我查了一些方法,但他们似乎都失败了: char[] password = "password".toCharArray(); byte[] passwordBytes1 = new byte[password.length*2]; ByteBuffer.wrap(passwordBytes1).asCharBuffer().put(password); byte[] passwordBytes2 = new byte[password.length*2]; for(int i=0; i<password.length; i++) { passwordBytes2[2*i] = (byte) ((password[i]&0xFF00)>>8); passwordBytes2[2*i+1] = (byte) (password[i]&0x00FF); } String passwordAsString = new String(password); String passwordBytes1AsString = new String(passwordBytes1); String passwordBytes2AsString = new String(passwordBytes2); System.out.println(passwordAsString); System.out.println(passwordBytes1AsString); System.out.println(passwordBytes2AsString); assertTrue(passwordAsString.equals(passwordBytes1) || passwordAsString.equals(passwordBytes2)); 断言总是失败(而且,批判地说,当代码在生产中被使用时,密码被拒绝),然而打印语句打印出三次密码。 为什么passwordBytes1AsString和passwordBytes2AsString不同于passwordAsString […]
请有人澄清C#关键字请。 特别是这两个问题: Q1)第5行; 为什么这个回报是真的? Q2)第7行; 为什么没有抛出exception? public void Test() { object intArray = new int[] { -100, -200 }; if (intArray is uint[]) //why does this return true? { uint[] uintArray = (uint[])intArray; //why no class cast exception? for (int x = 0; x < uintArray.Length; x++) { Console.Out.WriteLine(uintArray[x]); } } } MSDN的描述没有说明情况。 它表示,如果满足这些条件中的任何一个,将会返回true。 (http://msdn.microsoft.com/en-us/library/scekt9xw(VS.71).aspx>MDSN […]
我得到数组到string转换错误为以下行: $diff = array_diff($stockist, $arr); 这里, $arr是一个从JSON文件解码的数组。 使用is_array()函数我能够validation这两个参数是数组。 有人可以指出我的问题 $stockist = array(); while (!feof($file_handle)) { $line_of_text = fgetcsv($file_handle); $query = "SELECT * FROM reorderchart WHERE medicine = '" . trim($line_of_text[3]) . "' ORDER BY medicine"; $result = mysql_query($query); if (trim($line_of_text[2]) – trim($line_of_text[1]) <= 0) { while ($row = mysql_fetch_array($result)) { $file = "results.json"; $arr = […]
许多人在Excel / VBA中广泛使用数组来存储数据列表。 但是,在我看来,有更多的收集对象更方便(主要是:不需要重新定义列表的长度)。 所以,我真诚地问自己,如果我错过了什么? 为什么其他人仍然使用数组来存储数据列表? 这仅仅是过去的宿醉吗?
假设我想获得大小未知的自动数组的最后一个元素。 我知道我可以使用sizeof运算符来获得数组的大小,并相应地得到最后一个元素。 正在使用*((*(&array + 1)) – 1)安全吗? 喜欢: char array[SOME_SIZE] = { … }; printf("Last element = %c", *((*(&array + 1)) – 1)); int array[SOME_SIZE] = { … }; printf("Last element = %d", *((*(&array + 1)) – 1)); 等等
假设我有这样的一个class级: public class Fraction { int numerator; int denominator; public Fraction(int n, int d) { // set the member variables } // And then a bunch of other methods } 我想以一个很好的方式初始化它们的一个数组,这个post是一个容易出错或者在语法上很麻烦的大方法列表。 当然,一个数组构造函数会很好,但是没有这样的事情: public Fraction[](params int[] numbers) 所以我不得不使用类似的方法 public static Fraction[] CreateArray(params int[] numbers) { // Make an array and pull pairs of numbers for constructor […]
对于那些不想要背景的人来说,TL; DR版本是以下具体问题: 题 为什么Java没有实现真正的multidimensional array? 有一个坚实的技术原因吗? 我在这里错过了什么? 背景 Java在语法级别有multidimensional array,可以声明 int[][] arr = new int[10][10]; 但这似乎并不是人们所期望的。 而不是让JVM分配一个足以存储100个int的连续块,它是以int数组的forms出现的:所以每一层都是连续的RAM块,但是整体来说不是这样。 访问arr[i][j]是相当慢的:JVM必须 find存储在arr[i]的int[] arr[i] ; 索引这个来find存储在arr[i][j]的int 。 这包括查询一个对象从一层到另一层,这是相当昂贵的。 为什么Java这样做 在一个层面上,不难看出为什么不能通过简单的扩展和增加查找来优化,即使它们全部分配在一个固定块中。 问题是, arr[3]是所有它自己的参考,它可以被改变。 所以虽然数组的大小是固定的,但我们可以很容易地写出来 arr[3] = new int[11]; 现在规模和增加是因为这个层次的增长而被拧紧的。 你需要知道在运行时是否所有东西都和以前一样大小。 此外,当然,这将被分配到RAM中的其他地方(这将是,因为它比它所替代的要大),所以它甚至不是在缩放和添加的正确位置。 有什么问题呢 在我看来,这是不理想的,这有两个原因。 首先,它很慢 。 对于多维情况( int[1000000]和int[100][100][100] ),使用这些方法对单维或multidimensional array的内容进行求和的testing花费了近两倍的时间 (714秒vs 371秒) int[100][100][100] ,用随机的int值填充,运行1000000次,热caching)。 public static long sumSingle(int[] arr) { long […]